Enabling reactive behavior on output adapters
One of the most important benefits of using hexagonal architecture is the improved flexibility to change technologies without significant refactoring. The hexagonal system is designed in such a way that its domain logic and business rules are oblivious about the technologies utilized to execute them.
There is no free lunch – when we decide to use the hexagonal architecture, we have to pay the price for the benefits that such architecture can provide. (By price, I mean a considerable increase in the effort and complexity required to structure the system code by following the hexagonal principles.)
If you're concerned about code reuse, you may find some practices awkward to decouple code from specific technologies. For example, consider a scenario where we have a domain entity class and a database entity class. One can argue by saying, why not have just one class that serves both purposes? Well, in the end, it's all...