Clean Architecture: A Craftsman's Guide to Software Structure and Design
Rate it:
Open Preview
4%
Flag icon
A good architecture comes from understanding it more as a journey than as a destination, more as an ongoing process of enquiry than as a frozen artifact.
4%
Flag icon
The only way to go fast, is to go well. —Robert C. Martin
6%
Flag icon
When software is done right, it requires a fraction of the human resources to create and maintain. Changes are simple and rapid. Defects are few and far between. Effort is minimized, and functionality and flexibility are maximized.
7%
Flag icon
Tortoise and the Hare.
7%
Flag icon
“Slow and steady wins the race.” • “The race is not to the swift, nor the battle to the strong.” • “The more haste, the less speed.”
7%
Flag icon
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.
7%
Flag icon
And so the developers never switch modes. They can’t go back and clean things up because they’ve got to get the next feature done, and the next, and the next, and the next.
7%
Flag icon
The fact is that making messes is always slower than staying clean, no matter which time scale you are using.
7%
Flag icon
The developers may think that the answer is to start over from scratch and redesign the whole system—but that’s just the Hare talking again.
7%
Flag icon
Their overconfidence will drive the redesign into the same mess as the original project.
9%
Flag icon
The dilemma for software developers is that business managers are not equipped to evaluate the importance of architecture.
Osvaldo Santana Neto
This!
9%
Flag icon
Therefore it is the responsibility of the software development team to assert the importance of architecture over the urgency of features.
Osvaldo Santana Neto
This!
9%
Flag icon
FIGHT FOR THE ARC...
This highlight has been truncated due to consecutive passage length restrictions.
9%
Flag icon
The development team has to struggle for what they believe to be best for the company, and so do the management team, and the marketing team, and the sales team, and the operations team. It’s always a struggle.
9%
Flag icon
Effective software development teams tackle that struggle head on. They unabashedly squabble with all the other stakeholders as equals. Remember, as a software developer, you are a stakeholder.
11%
Flag icon
Dijkstra once said, “Testing shows the presence, not the absence, of bugs.” In other words, a program can be proven incorrect by a test, but it cannot be proven correct.
17%
Flag icon
Single Responsibility Principle
17%
Flag icon
Conway’s law:
17%
Flag icon
The best structure for a software system is heavily influenced by the social structure of the organization that uses it so that each software module has one, and only one, reason to change.
17%
Flag icon
Open-Closed Principle
17%
Flag icon
Bertrand Meyer
17%
Flag icon
software systems to be easy to change, they must be designed to allow the behavior of those systems to be changed by adding new code...
This highlight has been truncated due to consecutive passage length restrictions.
17%
Flag icon
Liskov Substitution Principle
17%
Flag icon
Barbara Liskov’s
17%
Flag icon
Interface Segregation Principle
17%
Flag icon
software designers to avoid depending on things that they don’t use.
17%
Flag icon
Dependency Inversion Principle
17%
Flag icon
The code that implements high-level policy should not depend on the code that implements low-level details. Rather, details should depend on policies.
17%
Flag icon
A module should have one, and only one, reason to change.
17%
Flag icon
Software systems are changed to satisfy users and stakeholders; those users and stakeholders are the “reason to change”
18%
Flag icon
A module should be responsible to one, and only one, actor.
18%
Flag icon
That word “cohesive” implies the SRP. Cohesion is the force that binds together the code responsible to a single actor.
18%
Flag icon
SYMPTOM 1: ACCIDENTAL DUPLICATION
18%
Flag icon
SYMPTOM 2: MERGES
19%
Flag icon
A software artifact should be open for extension but closed for modification.
19%
Flag icon
if simple extensions to the requirements force massive changes to the software, then the architects of that software system have engaged in a spectacular failure.
Osvaldo Santana Neto
Excessive tests maintenance is a symptom of violation of this principle?
19%
Flag icon
All the other components are dealing with peripheral concerns. The Interactor deals with the central concern.
21%
Flag icon
Barbara Liskov, “Data Abstraction and Hierarchy,” SIGPLAN Notices 23, 5 (May 1988).
22%
Flag icon
This is the primary reason that dynamically typed languages create systems that are more flexible and less tightly coupled than statically typed languages.
22%
Flag icon
We tolerate those concrete dependencies because we know we can rely on them not to change.
22%
Flag icon
It is the volatile concrete elements of our system that we want to avoid depending on. Those are the modules that we are actively developing, and that are undergoing frequent change.
Osvaldo Santana Neto
How we can know before hand what component is stable enough ?
22%
Flag icon
It also puts severe constraints on the creation of objects and generally enforces the use of Abstract Factories.
Osvaldo Santana Neto
Or injecting dependencies?
26%
Flag icon
Don’t force users of a component to depend on things they don’t need.
Osvaldo Santana Neto
Node.js npm libraries violates this?
26%
Flag icon
26%
Flag icon
For example, early in the development of a project, the CCP is much more important than the REP, because develop-ability is more important than reuse.
28%
Flag icon
Depend in the direction of stability.
29%
Flag icon
Stand a penny on its side. Is it stable in that position? You would likely say “no.” However, unless disturbed, it will remain in that position for a very long time. Thus stability has nothing directly to do with frequency of change.
29%
Flag icon
Stability is related to the amount of work required to make a change.
29%
Flag icon
I = Fan-out / (Fan-in + Fan-out).
Osvaldo Santana Neto
s/,/\//
29%
Flag icon
The SDP says that the I metric of a component should be larger than the I metrics of the components that it depends on. That is, I metrics should decrease in the direction of dependency.
« Prev 1 3