Download - Mind Your Business. And Its Logic

Transcript
Page 1: Mind Your Business. And Its Logic

AND ITS LOGICMIND YOUR BUSINESS

Page 2: Mind Your Business. And Its Logic

Vladik Khononov Chief Architect @ Internovus

@vladikk

http://vladikk.com

Page 3: Mind Your Business. And Its Logic

BUSINESS LOGIC

Page 4: Mind Your Business. And Its Logic

PRESENTATION LAYER

BUSINESS LOGIC LAYER

DATA ACCESS LAYER

Page 5: Mind Your Business. And Its Logic

💵

Page 6: Mind Your Business. And Its Logic

PRESENTATION LAYER

BUSINESS LOGIC LAYER

DATA ACCESS LAYER

Page 7: Mind Your Business. And Its Logic

Transaction Script

Active Record

Domain Model

Event Sourced Domain Model

Page 8: Mind Your Business. And Its Logic

TRANSACTION SCRIPT

Page 9: Mind Your Business. And Its Logic

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

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

DATABASE

UI

Page 11: Mind Your Business. And Its Logic

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

ACTIVE RECORD

Page 13: Mind Your Business. And Its Logic

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

USER INTERESTS

ID

NAME Hasmany

ADDRESSCOUNTRY CITY

STREET

Page 15: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

DATABASE

UI

Page 16: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH

USERS

UI

ACTIVE

RECORDSUSER

DATABASE

Page 17: Mind Your Business. And Its Logic

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

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

DOMAIN MODEL

Page 20: Mind Your Business. And Its Logic

DOMAIN MODEL

â–¸ Complex Business Logic

â–¸ Business rules

â–¸ Invariants

â–¸ Calculations

â–¸ Complex algorithms

Page 21: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH

USERS

UI

ACTIVE

RECORDSUSER

DATABASE

Page 22: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

UI

DOMAINMODEL

USER

DATABASE

Page 23: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

UI

DOMAINMODEL

USER

INFRASTRUCTURE

Page 24: Mind Your Business. And Its Logic

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

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

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

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

UI

DOMAINMODEL

USER

INFRASTRUCTURE

Page 28: Mind Your Business. And Its Logic

EVENT SOURCED DOMAIN MODEL

Page 29: Mind Your Business. And Its Logic

EVENT SOURCED DOMAIN MODEL

â–¸ Complex Business Logic

â–¸ Business rules

â–¸ Invariants

â–¸ Complex algorithms

â–¸ Deals w/ money

â–¸ Data analysis required

â–¸ Audit required by law

Page 31: Mind Your Business. And Its Logic

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

EVENT SOURCED DOMAIN MODEL

â–¸ UserInitialized(1, John, [email protected])

â–¸ NameChanged(1, James)

â–¸ EmailChanged(1, [email protected])

Page 33: Mind Your Business. And Its Logic

APPLICATIONCREATE USER UPDATE USER SEARCH USERS

UI

DOMAINMODEL

USER

EVENT STORE

Page 34: Mind Your Business. And Its Logic

Transaction Script

Active Record

Domain Model

Event Sourced Domain Model

Page 35: Mind Your Business. And Its Logic

APPLICATION ARCHITECTURE

Page 36: Mind Your Business. And Its Logic

LAYERED ARCHITECTURE

PRESENTATION LAYER

BUSINESS LOGIC LAYER

DATA ACCESS LAYER

Page 37: Mind Your Business. And Its Logic

HEXAGONAL / PORTS & ADAPTERS / ONION / CLEAN ARCHITECTURE

CORE

SERVICES

INFRASTRUCTURE

Page 38: Mind Your Business. And Its Logic

CQRS - COMMAND QUERY RESPONSIBILITY SEGREGATION

WRITE MODEL

COMMANDS

UI

READ MODEL

QUERIES

Page 39: Mind Your Business. And Its Logic

«SHLIKHTA» ARCHITECTURE

EVERYTHING

Page 40: Mind Your Business. And Its Logic

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

TESTING STRATEGIES

Page 42: Mind Your Business. And Its Logic

TESTS PYRAMID

UI/

End to End

Service / APIlayer tests

Unit Tests

Page 43: Mind Your Business. And Its Logic

TESTS PYRAMID

UI/

End to End

Service / APIlayer tests

Unit Tests

Page 44: Mind Your Business. And Its Logic

TESTS PYRAMID

UI/

End to End

Service / APIlayer tests

Unit Tests

Page 45: Mind Your Business. And Its Logic

TESTS PYRAMID

UI/

End to End

Service / APIlayer tests

Unit Tests

Page 46: Mind Your Business. And Its Logic

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

LANGUAGE AND TECHNOLOGY

Page 48: Mind Your Business. And Its Logic

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

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

RAMIFICATIONS

â–¸ Architectural style / pattern

â–¸ Testing strategy

â–¸ Language and technology

â–¸ Programming style

â–¸ Language type

Page 51: Mind Your Business. And Its Logic

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

TRANSACTION SCRIPT

ACTIVE RECORD

DOMAIN MODEL

EVENT SOURCED DOMAIN MODEL

Page 53: Mind Your Business. And Its Logic

AGILE ARCHITECTURE

Page 54: Mind Your Business. And Its Logic

TRANSACTION SCRIPT / SHLIKHTA

ACTIVE RECORD / LAYERS

DOMAIN MODEL / HEXAGONAL

EVENT SOURCED DOMAIN MODEL / CQRS

Page 55: Mind Your Business. And Its Logic

DECISION SCOPE

Page 56: Mind Your Business. And Its Logic

CAMPAIGN MANAGEMENT LEAD MANAGEMENT

Page 57: Mind Your Business. And Its Logic

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

SUMMARY

Page 59: Mind Your Business. And Its Logic

Business Driven Architecture

Page 60: Mind Your Business. And Its Logic
Page 61: Mind Your Business. And Its Logic

QUESTIONS?

Page 62: Mind Your Business. And Its Logic

THANK YOU

Vladik Khononov Chief Architect @ Internovus

@vladikk

http://vladikk.com