Premises Flashcards
No Silver Bullet
In Software Architecture, there’s no “silver bullet”. There’s no architecture that fits well in all the contexts. It is important, though, to know and understand all the architectures, its pros and cons and which problems they solve.
Terminology - Functional
Any piece of code that has purely a technical role. In other words, code that is not related to the domain. Examples: Factories, Repositories and Views.
Terminology - Conceptual
Any piece of code that represents bussiness logic and/or capability. It is related to the domain. Examples: User, Product and Order.
Terminology - Package
Any set of classes grouped together, ideally following some set of rules
Terminology - Module
It is a functional package, it reflects a technical capability in the application. It is decoupled and can be swapped by another implementation. Examples can be the Security Module
Terminology - Component
It is a conceptual package that reflects a business capability. It is also, ideally, decoupled from other components and modules. Examples can be “User”, “Product” or “Checkout”
The most important thing to remember, though, is that, ideally, it reflects a bounded context. Components provide for Conceptual cohesion.
Terminology - Application
Application is the user-facing code, the UI, which is built on top of the Components.
Terminology - System
I think of the system as a set of applications that somehow work together to provide functionality to a wide range of enterprise necessities, forming an enterprise-wide system, an Enterprise Application.
Terminology - Architecture
Software Architecture is the set of structures needed to reason about the system, which comprises software elements, relations among them, and properties of both.
All technical decisions that are cross-cutting to all feature development, ie. frameworks, coding standards, documentation, processes.
It’s the big picture view of the system, the broad strokes, the structure, the components and their relations.
Terminology - Architect
He is the guardian and promoter of the Architecture, which is discussed and decided as a guild. He is one of the most experienced developers in the team/department, which happens to have the extra responsibility of analysing high-level problems and solutions.
Smells of a bad Architecture
Rigidity, Fragility, Immobility, Viscosity, Needless repetition, Opacity, Needless complexity.