Even though we have modernized our application, it is still not perfect. Frankly, it will never be perfect (whatever that may happen to mean). There will always be some opportunity to improve it. Indeed, the modernization process itself has revealed many opportunities for us.
The data source layer is composed of a series of Gateways. While they serve our purpose nicely for now, it may be better to restructure these as Data Mappers that interact more cleanly with our domain objects.
The domain layer is built on top of Transaction Scripts. These, too, are fine in their own way, but as we work with them, we may realize that they are insufficient for our needs. They combine too many aspects of our domain logic into monolithic classes and methods. We will probably want to begin to tease out the different aspects of our domain logic into a Domain Model and wrap it with a series of Service Layers.
The presentation layer is still relatively monolithic in nature. We may...