73
From layers to vertical slices Simplify your code and focus on your features Jon Hilton

Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

From layers to vertical slices

Simplify your code and focus on your features

Jon Hilton

Page 2: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 3: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 4: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 5: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 6: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

Could you just… ?

@jonhilt

Page 7: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 8: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 9: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 10: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 11: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Cohesion - the degree to which the elements inside a

module belong together

Modules with high cohesion tend to be preferable,

because high cohesion is associated with several

desirable traits of software including robustness,

reliability, reusability, and understandability

Wikipedia

Page 12: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Coupling is the degree of interdependence between

software modules; a measure of how closely connected

two routines or modules are.

Wikipedia

Page 13: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 14: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

ASP.NET/Presentation

UserController

ListAll

?

Page 15: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

ASP.NET/Presentation

Business Logic

Data Access

UserController

ListAll

UserService

ListAll

UserRepository

ListAll

User

Page 16: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Code here

Page 17: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 18: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 19: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 20: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

"Conceptually, a Repository encapsulates the set of

objects persisted in a data store and the operations

performed over them, providing a more object-oriented

view of the persistence layer. Repository also supports

the objective of achieving a clean separation and one-

way dependency between the domain and data

mapping layers."

Patterns of Enterprise Application Architecture by Martin Fowler et al

Page 21: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

"adding this layer helps minimise duplicate query logic..."

Patterns of Enterprise Application Architecture by Martin Fowler et al

Page 22: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 23: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 24: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 25: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 26: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 27: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

ASP.NET/Presentation

Business Logic

Data Access

UserController

ListAll Search

UserService

ListAll Search

UserRepository

ListAll

Page 28: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 29: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

ASP.NET/Presentation

Business Logic

Data Access

UserController

ListAll Search

UserService

Search

UserRepository

ListAll

AdminUserService

ListAll

AdminUserController

ListAll

@jonhilt

ListAll

Page 30: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

UserController

ListAll Search

UserService

Search

UserRepository

ListAll

AdminUserService

ListAll

AdminUserController

ListAll

@jonhilt

ListAll Add

Add

Add

CustomerController

Enrol

CustomerService

Enrol

CustomerRepository

Create

Delete

Delete

Delete Delete

Page 31: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Helpers Mappers Managers

Factories ServiceFactories Functions

Requests Responses Models

ViewModels DALs Readers

Repositories ReadOnlyRepositories

Page 32: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 33: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 34: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt
Page 35: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

What if we focus on features?

Page 36: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 37: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 38: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

UserController

ListAll

User List

Page 39: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

UserController

ListAll

User List

Users/ListAll

Request (Query) Response (Model)

User

Page 40: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 41: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 42: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 43: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 44: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

Users/Search

@jonhilt

UserController

ListAll

User List User Search

Search

Request (Query)Term (string)

Response (Model)SearchResults

Users/ListAll

User

Page 45: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 46: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 47: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 48: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

Users/Search

@jonhilt

UserController

ListAll

User List User Search

Search

Request (Command)FirstName (string)LastName (string)

Users/ListAll

Add User

Add

Users/Add

User

Page 49: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 50: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 51: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Encapsulate by feature

Page 52: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

Users/Search

@jonhilt

UserControlller

ListAll

User List User Search

Users/ListAll

Add User

Users/Add

UserController

Search

UserController

Add

Page 53: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Success!

Developer

Page 54: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Refactor by feature

Page 55: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

DeactivateUser

Users/Deactivate

User Aggregate.Deactivate()

User

Page 56: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 57: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 58: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Avoid links between features

(specific, business logic)

Page 59: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

PilotController

List

Pilot/List

Pilot List

Search

Pilot/Search

Pilot Search

Add

Pilot/Add

Add Pilot

Retire

Pilot/Retire

Retire Pilot

Pilot

AttendantController

ListByRank

Attendant/List

Attendant ListByRank

Add

Attendant/Add

Add Attendant

UpdateAddress

Attendant/UpdateAddress

Update Attendant Address

Flight Attendant

AttendantAddress

Page 60: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

What about tests?

Page 61: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

UserController

ListAll Search

UserService

Search

UserRepository

ListAll

AdminUserService

ListAll

AdminUserController

ListAll

@jonhilt

ListAll Add

Add

Add

CustomerController

Enrol

CustomerService

Enrol

CustoemerRepository

Create

Page 62: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

CustomerController

Enrol

CustomerService

Enrol

CustomerRepository

Create

Test in isolation

Test?

Test?

Customer

Page 63: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

I should see the last x users who logged in (in

descending order by their last login date/time)

UserController

RecentLogins

Users/RecentLogins

User

When viewing the most recent user logins

Page 64: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

The names used are those of

the business domain (feature)

Page 65: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 66: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 67: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Humanitarian Toolbox – allreadyhttps://github.com/HTBox/allReady

Jimmy Bogard – Contoso Universityhttps://github.com/jbogard/ContosoUniversityDotNetCore

Tackling Business Complexity in a Microservice with DDD and CQRS Patternshttps://bit.ly/msmediatr

Examples in the wild

Page 68: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 69: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 70: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

Page 71: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

There is no “best” design.

There is only the “best design

given our current understanding”

Jimmy Bogard – “Strengthening your domain” https://bit.ly/NoBestDesign

Page 72: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

@jonhilt

jonhilton.net/slices

Page 73: Jon Hilton From layers to vertical slices...From layers to vertical slices Simplify your code and focus on your features Jon Hilton @jonhilt @jonhilt Could you just… ? @jonhilt @jonhilt

Thank YouJon Hilton

[email protected]

jonhilton.net/slices

@jonhilt