Top Banner
AND ITS LOGIC MIND YOUR BUSINESS
62

Mind Your Business. And Its Logic

Jan 22, 2018

Download

Software

Vladik Khononov
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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