More on this book
Community
Kindle Notes & Highlights
When software is done right, it requires a fraction of the human resources to create and maintain.
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
The measure of design quality is simply the measure of the effort required to meet the needs of the customer. If that effort is low, and stays low throughout the lifetime of the system, the design is good. If that effort grows with each new release, the design is bad. It’s as simple as that.
These developers buy into a familiar lie: “We can clean it up later; we just have to get to market first!” Of course, things never do get cleaned up later, because market pressures never abate. Getting to market first simply means that you’ve now got a horde of competitors on your tail, and you have to stay ahead of them by running as fast as you can.
The only way to go fast, is to go well.
The second value of software has to do with the word “software”—a compound word composed of “soft” and “ware.” The word “ware” means “product”; the word “soft”… Well, that’s where the second value lies.
If you give me a program that does not work but is easy to change, then I can make it work, and keep it working as requirements change. Therefore the program will remain continually useful.
The first value of software—behavior—is urgent but not always particularly important. The second value of software—architecture—is important but never particularly urgent.
Notice how well those three align with the three big concerns of architecture: function, separation of components, and data management.
OO is the ability, through the use of polymorphism, to gain absolute control over every source code dependency in the system. It allows the architect to create a plugin architecture, in which modules that contain high-level policies are independent of modules that contain low-level details. The low-level details are relegated to plugin modules that can be deployed and developed independently from the modules that contain high-level policies.
Event sourcing is a strategy wherein we store the transactions, but not the state. When state is required, we simply apply all the transactions from the beginning of time.
Gather together those things that change at the same times and for the same reasons. Separate those things that change at different times or for different reasons.
A good architect finds a position in that tension triangle that meets the current concerns of the development team,
Common Closure Principle (CCP),
Stable Dependencies Principle (SDP),
The strategy behind that facilitation is to leave as many options open as possible, for as long as possible.
The primary purpose of architecture is to support the life cycle of the system.
Good architecture makes the system easy to understand, easy to develop, easy to maintain, and easy to deploy. The ultimate goal is to minimize the lifetime cost of the system and to maximize programmer productivity.
A good architect maximizes the number of decisions not made.
An Entity is an object within our computer system that embodies a small set of critical business rules operating on Critical Business Data.
The Entity object either contains the Critical Business Data or has very easy access to that data. The interface of the Entity consists of the functions that implement the Critical Business Rules that operate on that data.
Growing Object Oriented Software with Tests