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 so that its domain logic and business rules are oblivious to 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 this 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 in which we have a domain entity class and a database entity class. We may argue, why not have just one class that serves both purposes? Well, in the end, it’s all a matter of priorities...