- https://sourcemaking.com/design_patterns (Design Patterns: structural and more; also remember to avoid anti-patterns)
- https://sourcemaking.com/refactoring (code smells: what to do to improve this "code smell"?)
Nice readings.
Well, as the title states we'll be addressing software development topics (mainly in English). Topics will be quick and short and most probably aligned with the training "problems", sorry, programs I am involved in. PS. Some links are "internal" (not publicly available): If you are not able to reach it, google will find you a publicly available information source for sure. Happy trails to you.
- The archetype establishes tier and layer separation and, in the physical tier perspective, a clear and unavoidable packaging and coupling isolation criterion.
- The archetype is a structural technical view of the solution regardless of business domain and particularities. As such, it is a very stable and reusable specification.
- The archetype is also a technological determinant decision as it clearly points to the usage of specific technologies, frameworks, development environments, etc.
- The Packaging Components represent the binary outputs of the solution (in .Net for instance these correspond to the .EXE and .DLL)
- Their decomposition criteria are based on coupling, deployment and tier placement.
- The Packaging Component represents a single reference point for the functionality and is an aggregation for further decomposition (Component).
- Remember that Components may be nested into each other to produce sub-levels of decomposition and reduce complexity of the overviews.
- This is a pure conceptual view that is not directly concerned with packaging and deployment.
- This view is oriented by “information-hiding” in Parnas sense. The goal here is to represent the system with as few major concepts as possible. Of course each of those concepts may be further detailed (by sub-components) as needed.
- Cohesion is a measure of how strongly related and focused the responsibilities of a single module are. That is, how homogeneous and simple is the goal of a software module.
- Coupling (or dependency) is the degree to which each program module depends on each other module.
- Release Reuse Equivalency Principle: The granule of reuse is the granule of release (and that should be the package).
- Common Closure Principle: Classes that change together, belong together.
- Common Reuse Principle: Classes that aren’t reused together should not be grouped together.
- Acyclic Dependencies Principle: The dependencies between packages must not form cycles.
- Stable Dependencies Principle: Depend in the direction of stability.
- Stable Abstractions Principle: Stable packages should be abstract packages.