Encapsulation is a way of organizing code into separate modules, where each module has a clear and well-defined responsibility. It allows for better code reusability, maintainability, and testability.
Libraries and frameworks are both useful tools for building software applications. However, there is a key difference between the two in terms of encapsulation.
Libraries are typically designed to provide a set of functions or utilities that can be used in a variety of contexts. They are generally more loosely coupled and have fewer dependencies on your application code. Encapsulating a library means that you isolate its functionality and implementation details, allowing your application code to interact with it through a well-defined interface.
It can be a good idea to encapsulate a library to limit the dependencies to third-party components which makes it harder to maintain your application in the long run. Typically we do this by creating a wrapper that isolates our component by a specific interface.
Pro tip: Focus only on the functionality you need in this interface and don’t try to mimic the complete library.
Frameworks, on the other hand, are designed to provide a more comprehensive solution for building an entire application. They often include a set of pre-defined patterns, structures, and conventions that are tightly integrated with your application code. Encapsulating a framework can be more difficult because it may require modifying the way your application is structured, which could impact its overall architecture.
It is possible to wrap a framework, but it’s often more trouble than it’s worth.
Therefore, it is generally recommended to encapsulate libraries but not frameworks. Encapsulating a library can provide many benefits, while encapsulating a framework can be more challenging and may not provide the same level of benefits.