mind your business. and its logic
TRANSCRIPT
![Page 1: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/1.jpg)
AND ITS LOGICMIND YOUR BUSINESS
![Page 3: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/3.jpg)
BUSINESS LOGIC
![Page 4: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/4.jpg)
PRESENTATION LAYER
BUSINESS LOGIC LAYER
DATA ACCESS LAYER
![Page 5: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/5.jpg)
💵
![Page 6: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/6.jpg)
PRESENTATION LAYER
BUSINESS LOGIC LAYER
DATA ACCESS LAYER
![Page 7: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/7.jpg)
Transaction Script
Active Record
Domain Model
Event Sourced Domain Model
![Page 8: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/8.jpg)
TRANSACTION SCRIPT
![Page 9: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/9.jpg)
TRANSACTION SCRIPT
▸ Simple Business Logic
▸ CRUD
▸ Input Validation
▸ Extract Transform Load (ETL)
▸ Simple Data Structures
▸ Always leave the database in a consistent state
![Page 10: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/10.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
DATABASE
UI
![Page 11: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/11.jpg)
public class CreateUser {
public void Execute(name, email) {
try {
DB.StartTransaction();var row = DB.NewUserRow(); row.Name = name;row.Email = email;DB.Append(row);DB.Commit();
} catch {
DB.Rollback();throw;
}
}
}
![Page 12: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/12.jpg)
ACTIVE RECORD
![Page 13: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/13.jpg)
ACTIVE RECORD
▸ Simple Business Logic
▸ CRUD
▸ Input Validation
▸ Extract Transform Load (ETL)
▸ Complex Data Structures
▸ References / Collections
▸ Multiple Tables
![Page 14: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/14.jpg)
USER INTERESTS
ID
NAME Hasmany
ADDRESSCOUNTRY CITY
STREET
![Page 15: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/15.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
DATABASE
UI
![Page 16: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/16.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH
USERS
UI
ACTIVE
RECORDSUSER
DATABASE
![Page 17: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/17.jpg)
public class CreateUser {
public void Execute(userDetails) {
try {
DB.StartTransaction();var user = new User();user.Name = userDetails.Name;user.Email = userDetails.Email;user.Save();DB.Commit();
} catch {
DB.Rollback();throw;
}
}
}
![Page 18: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/18.jpg)
public class User {
public Guid Id { get; set; }public string Name { get; set; }public List<Interest> Interests { get; set; }public Address Address { get; set; }
public void Save() { … }public void Delete() { … }public static User Get(Guid id) { … }public static List<User> GetAll() { … }
}
![Page 19: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/19.jpg)
DOMAIN MODEL
![Page 20: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/20.jpg)
DOMAIN MODEL
▸ Complex Business Logic
▸ Business rules
▸ Invariants
▸ Calculations
▸ Complex algorithms
![Page 21: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/21.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH
USERS
UI
ACTIVE
RECORDSUSER
DATABASE
![Page 22: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/22.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
UI
DOMAINMODEL
USER
DATABASE
![Page 23: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/23.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
UI
DOMAINMODEL
USER
INFRASTRUCTURE
![Page 24: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/24.jpg)
DOMAIN MODEL
▸ Complex business logic
▸ Model business domain
▸ Objects: data + behavior
▸ Plain objects
▸ Minimal application level use cases
![Page 25: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/25.jpg)
public class UpdateUser {
public void Execute(userDetails) {
try {
var user = usersRepository.Get(userDetails.Id);user.UpdateDetails(userDetails);usersRepository.Save(user);
} catch {
DB.Rollback();throw;
}
}
}
![Page 26: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/26.jpg)
public class User {
public Guid Id { get; private set; }public string Name { get; private set; }public List<Interest> Interests { get; private set; }public Address Address { get; private set; }
public void UpdateDetails() { … }public void AddInterest() { … }public static User InitializeNew() { … }
}
public interface IUsersRepository {
User Get(Guid id);void Save(User user); void Delete(User user);
}
![Page 27: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/27.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
UI
DOMAINMODEL
USER
INFRASTRUCTURE
![Page 28: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/28.jpg)
EVENT SOURCED DOMAIN MODEL
![Page 29: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/29.jpg)
EVENT SOURCED DOMAIN MODEL
▸ Complex Business Logic
▸ Business rules
▸ Invariants
▸ Complex algorithms
▸ Deals w/ money
▸ Data analysis required
▸ Audit required by law
![Page 30: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/30.jpg)
EVENT SOURCED DOMAIN MODEL
PhoneEmailNameId
![Page 31: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/31.jpg)
public class NewUserInitialized {
public Guid UserId { get; private set; }public string Name { get; private set; }public string Email { get; private set; }
}
public class NameChanged {
public Guid UserId { get; private set; }public string NewName { get; private set; }
}
public class EmailChanged {
public Guid UserId { get; private set; }public string NewEmail { get; private set; }
}
![Page 32: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/32.jpg)
EVENT SOURCED DOMAIN MODEL
▸ UserInitialized(1, John, [email protected])
▸ NameChanged(1, James)
▸ EmailChanged(1, [email protected])
![Page 33: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/33.jpg)
APPLICATIONCREATE USER UPDATE USER SEARCH USERS
UI
DOMAINMODEL
USER
EVENT STORE
![Page 34: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/34.jpg)
Transaction Script
Active Record
Domain Model
Event Sourced Domain Model
![Page 35: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/35.jpg)
APPLICATION ARCHITECTURE
![Page 36: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/36.jpg)
LAYERED ARCHITECTURE
PRESENTATION LAYER
BUSINESS LOGIC LAYER
DATA ACCESS LAYER
![Page 37: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/37.jpg)
HEXAGONAL / PORTS & ADAPTERS / ONION / CLEAN ARCHITECTURE
CORE
SERVICES
INFRASTRUCTURE
![Page 38: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/38.jpg)
CQRS - COMMAND QUERY RESPONSIBILITY SEGREGATION
WRITE MODEL
COMMANDS
UI
READ MODEL
QUERIES
![Page 39: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/39.jpg)
«SHLIKHTA» ARCHITECTURE
EVERYTHING
![Page 40: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/40.jpg)
EVENT SOURCED DOMAIN MODEL
• Shlikhta Architecture
• Layered Architecture
• Hexagonal Architecture
• CQRS
• Transaction Script
• Active Record
• Domain Model
• Event Sourced Domain Model
![Page 41: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/41.jpg)
TESTING STRATEGIES
![Page 42: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/42.jpg)
TESTS PYRAMID
UI/
End to End
Service / APIlayer tests
Unit Tests
![Page 43: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/43.jpg)
TESTS PYRAMID
UI/
End to End
Service / APIlayer tests
Unit Tests
![Page 44: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/44.jpg)
TESTS PYRAMID
UI/
End to End
Service / APIlayer tests
Unit Tests
![Page 45: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/45.jpg)
TESTS PYRAMID
UI/
End to End
Service / APIlayer tests
Unit Tests
![Page 46: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/46.jpg)
TESTING STRATEGIES
• End to end tests
• API layer tests
• Unit tests
• Unit tests
• Transaction Script
• Active Record
• Domain Model
• Event Sourced Domain Model
![Page 47: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/47.jpg)
LANGUAGE AND TECHNOLOGY
![Page 48: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/48.jpg)
PROGRAMMING STYLE
• Procedural
• Procedural / OOP
• OOP
• Functional
• Transaction Script
• Active Record
• Domain Model
• Event Sourced Domain Model
![Page 49: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/49.jpg)
DYNAMIC / STATIC TYPING
• Dynamic
• Dynamic
• Static
• Static
• Transaction Script
• Active Record
• Domain Model
• Event Sourced Domain Model
![Page 50: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/50.jpg)
RAMIFICATIONS
▸ Architectural style / pattern
▸ Testing strategy
▸ Language and technology
▸ Programming style
▸ Language type
![Page 51: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/51.jpg)
DECISION HEURISTIC
▸ Is the business logic mostly CRUD / ETL? Yes
▸ Are the data structures simple? yes - Transaction Script
▸ Are the data structures simple? No -Active Record
▸ Is the business logic mostly CRUD / ETL? No
▸ Is advanced analysis required, or dealing w/ money? NoDomain Model
▸ Is advanced analysis required, or dealing w/ money? YesEvent Sourced Domain Model
![Page 52: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/52.jpg)
TRANSACTION SCRIPT
ACTIVE RECORD
DOMAIN MODEL
EVENT SOURCED DOMAIN MODEL
![Page 53: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/53.jpg)
AGILE ARCHITECTURE
![Page 54: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/54.jpg)
TRANSACTION SCRIPT / SHLIKHTA
ACTIVE RECORD / LAYERS
DOMAIN MODEL / HEXAGONAL
EVENT SOURCED DOMAIN MODEL / CQRS
![Page 55: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/55.jpg)
DECISION SCOPE
![Page 56: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/56.jpg)
CAMPAIGN MANAGEMENT LEAD MANAGEMENT
![Page 57: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/57.jpg)
CAMPAIGN MANAGEMENT
LEAD MANAGEMENT
CREATIVE CATALOG
CAMPAIGN PUBLISHING
BILLING
USERS MANAGEMENT
SALES
COMMISSIONS CALCULATION
DESK MANAGEMENT
VOIP MANAGEMENT
![Page 58: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/58.jpg)
SUMMARY
![Page 59: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/59.jpg)
Business Driven Architecture
![Page 60: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/60.jpg)
![Page 61: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/61.jpg)
QUESTIONS?
![Page 62: Mind Your Business. And Its Logic](https://reader034.vdocuments.us/reader034/viewer/2022051720/58a364871a28aba4138b4fef/html5/thumbnails/62.jpg)
THANK YOU
Vladik Khononov Chief Architect @ Internovus
@vladikk
http://vladikk.com