Computers have been around for a long time and we're not the first people to use them to solve these kinds of problems for business people. In general, these business systems do three things:
1. Capture information, for example, via a web interface (presentation layer).
2. Apply business knowledge to this information (business layer).
3. Store or forward this information (service or data layer).
It is the business layer that we are most concerned with. The presentation and service layers, while not trivial, are known problems that lend themselves to some degree of standardization. In contrast, the business layer will be unique to each organization, as it reflects the processes and knowledge of the organization.
In some ways, the business layer is the 'learned memory of the organization'. Despite (or perhaps because of) years of implementing EIS (Executive Information Systems), many of them suffer from the following problems:
All three layers tend to be tightly interlinked, so it is not easy to extract the business logic and use it elsewhere.
Business knowledge and rules are often hidden in code. This is difficult to audit and can lead to discrepancies between the documentation and the actual implementation.
It is hard for the domain experts (the guys with the business knowledge) and the technical experts to collaborate as they (literally) speak different languages.
The business layer can be difficult to update, both in implementation and for fear of undesirable side effects.
Although theory states that these functions should be separated, the fact that the business tier is often expressed in a programming language like Java means that other functions (for example, database access) often creep in over time. Even worse, there is no clearly delineated place to put the business logic, which is why it can become scattered throughout the system, making it hard to reuse.
Given that we've had these problems for many years, how can we do any better?