-
The reason that we’re coding is the goal.
Software Engineer Definition by Modern Software Engineering’s book:
Software Engineering is the application of an empirical, scientific approach to finding efficient, economic solutions to practical problems in software.
-
Rich vs Anemic model
-
Bringing the code close to the business.
-
There are tactical and strategic perspectives
-
Strategic: it’s a business language: Bounded Context, ubiquitous language, context Maps.
-
Tactical: implementation, classes, and modules.
-
Entities: Anything with continuity through a life cycle and distinctions independent of attributes essential to the application’s user.
-
Aggregator: A DDD aggregate is a cluster of domain objects that can be treated as a single unit.
-
Value Object: Value Object is an object that represents a concept from your problem Domain.
-
Services: is used to perform domain operations and business rules
-
Repository: is used to access data from persistent stores.
There are several, such as story Storming, Story Mapping, and UML. My favorite one is Domain storytelling.
The tool: Egon.io
-
We are keeping the business safe from technology.
-
Hexagonal architecture
-
Ports and Adaptors
To be successful at combating the scale and complexity of software in the next decade, developers will need improved weapons… in three categories: partitioning, knowledge, and abstraction.
Abstraction can effectively combat complexity and scale because it shrinks problems, and smaller problems are easier to reason about it.
-
Unstructured Code Monolith
-
Modular Monolith
-
Layered Architecture
-
Mapper
-
DAO
-
Repository
-
-
Object-relational impedance mismatch
-
Polymorphism, types, conversion, mapper
-
90% is on that conversion
-
Hibernate and JPA were designed to work well in combination with handwritten SQL. ORM, 20 years later by Gavin King
-
NoSQL
-
Key-value
-
Wide-column
-
Document
-
Graph
-
Time Series
-
Even more
-
-
SQL
-
NewSQL
-
CAP
-
PACELC
-