Clean Architecture: A Craftsman's Guide to Software Structure and Design
Rate it:
Open Preview
32%
Flag icon
Software architects are the best programmers, and they continue to take programming tasks, while they also guide the rest of the team toward a design that maximizes productivity.
32%
Flag icon
The architecture of a software system is the shape given to that system by those who build it.
32%
Flag icon
The primary purpose of architecture is to support the life cycle of the system.
32%
Flag icon
A software system that is hard to develop is not likely to have a long and healthy lifetime.
32%
Flag icon
The higher the cost of deployment, the less useful the system is.
33%
Flag icon
The fact that hardware is cheap and people are expensive means that architectures that impede operation are not as costly as architectures that impede development, deployment, and maintenance.
33%
Flag icon
A good software architecture communicates the operational needs of the system.
33%
Flag icon
Of all the aspects of a software system, maintenance is the most costly.
33%
Flag icon
The primary cost of maintenance is in spelunking and risk.
33%
Flag icon
Spelunking is the cost of digging through the existing software, trying to determine the best place and the best strategy to add a new feature or to repair a defect.
33%
Flag icon
Software was invented because we needed a way to quickly and easily change the behavior of machines.
33%
Flag icon
The way you keep software soft is to leave as many options open as possible, for as long as possible.
33%
Flag icon
The goal of the architect is to create a shape for the system that recognizes policy as the most essential element of the system while making the details irrelevant to that policy.
39%
Flag icon
You draw lines between things that matter and things that don’t.
39%
Flag icon
All the business rules need to know is that there is a set of functions that can be used to fetch or save data.
40%
Flag icon
We don’t want changes in one part of the system to cause other unrelated parts of the system to break.
40%
Flag icon
Arranging our systems into a plugin architecture creates firewalls across which changes cannot propagate.
40%
Flag icon
Boundaries are drawn where there is an axis of change.
41%
Flag icon
At runtime, a boundary crossing is nothing more than a function on one side of the boundary calling a function on the other side and passing along some data.
42%
Flag icon
The services assume that all communications take place over the network.
42%
Flag icon
A computer program is a detailed description of the policy by which inputs are transformed into outputs.
42%
Flag icon
Policies that change for the same reasons, and at the same times, are at the same level and belong together in the same component.
42%
Flag icon
The farther a policy is from both the inputs and the outputs of the system, the higher its level.
43%
Flag icon
Strictly speaking, business rules are rules or procedures that make or save the business money.
44%
Flag icon
A use case is a description of the way that an automated system is used.
44%
Flag icon
Entities are generalizations that can be used in many different applications, so they are farther from the inputs and outputs of the system.
44%
Flag icon
The use case class accepts simple request data structures for its input, and returns simple response data structures as its output.
44%
Flag icon
The business rules should be the most independent and reusable code in the system.
45%
Flag icon
A good architecture emphasizes the use cases and decouples them from peripheral concerns.
52%
Flag icon
The architecture of a system is defined by boundaries that separate high-level policy from low-level detail and follow the Dependency Rule.
52%
Flag icon
Service interfaces are no more formal, no more rigorous, and no better defined than function interfaces.
54%
Flag icon
Tests are the most isolated system component.
54%
Flag icon
The role of the testing API is to hide the structure of the application from the tests.
55%
Flag icon
Firmware does not mean code lives in ROM.
57%
Flag icon
The name of the boundary between the software and the firmware is the hardware abstraction layer (HAL)
58%
Flag icon
Certainly, all of the software should be processor independent, but not all of the firmware can be.
59%
Flag icon
Limit the visibility of the implementation details. Expect the implementation details to change. The fewer places where code knows the details, the fewer places where code will have to be tracked down and modified.
59%
Flag icon
The database is a utility that provides access to the data.
60%
Flag icon
The rotating magnetic disk was the mainstay of data storage for five decades.
60%
Flag icon
Even though the data is kept in a database or a file system, you read it into RAM and then you reorganize it, for your own convenience, into lists, sets, stacks, queues, trees, or whatever data structure meets your fancy.
61%
Flag icon
The GUI is a detail. The web is a GUI. So the web is a detail.
62%
Flag icon
The WEB is an IO device.
62%
Flag icon
The author recommends that you derive from the framework’s base classes, and import the framework’s facilities into your business objects.
62%
Flag icon
Nothing feels more validating to a framework author than a bunch of users willing to inextricably derive from the author’s base classes.
63%
Flag icon
When faced with a framework, try not to marry it right away.
63%
Flag icon
Perhaps you can find a way to get the milk without buying the cow.
63%
Flag icon
Our first step in determining the initial architecture of the system is to identify the actors and use cases.
63%
Flag icon
An abstract use case is one that sets a general policy that another use case will flesh out.
64%
Flag icon
In Java, layers are typically implemented as packages.
64%
Flag icon