Vertical Feature Slices Not Layers Derek Comartin codeopinion

  • Slides: 60
Download presentation
Vertical Feature Slices Not Layers Derek Comartin @codeopinion. com

Vertical Feature Slices Not Layers Derek Comartin @codeopinion. com

Context

Context

Tech Clients & Server

Tech Clients & Server

Authorization

Authorization

Authorization Data Access

Authorization Data Access

Validation Authorization Data Access

Validation Authorization Data Access

Authorization Validation Data Access Business Logic

Authorization Validation Data Access Business Logic

Too Many Mixed Responsibilities (aka Turd Pile) Authorization Validation Data Access Business Logic

Too Many Mixed Responsibilities (aka Turd Pile) Authorization Validation Data Access Business Logic

Layer All The Things ASP. NET Auth BLL DAL Database

Layer All The Things ASP. NET Auth BLL DAL Database

Layer All The Things ASP. NET Auth BLL DAL Database

Layer All The Things ASP. NET Auth BLL DAL Database

Server HTTP Only Clients ASP. NET Clients Database

Server HTTP Only Clients ASP. NET Clients Database

Scheduled / Reoccurring Non HTTP Requests

Scheduled / Reoccurring Non HTTP Requests

Minimize Coupling to a Framework

Minimize Coupling to a Framework

Common Interface to Invoke Functionality

Common Interface to Invoke Functionality

Layered Technical Concerns Why organize by technical concerns?

Layered Technical Concerns Why organize by technical concerns?

Simple Changes Layered DAL/Product. Model. cs DAL/Product. Repository. cs BLL/Product. Manager. cs MVC/Controllers/Product. Controller.

Simple Changes Layered DAL/Product. Model. cs DAL/Product. Repository. cs BLL/Product. Manager. cs MVC/Controllers/Product. Controller. cs MVC/Views/Products/View. cshtml

Layered MVC Auth BLL DAL Database

Layered MVC Auth BLL DAL Database

Request-Response Controller Uniform API Database

Request-Response Controller Uniform API Database

CQRS Request Controller Auth BLL DAL Database

CQRS Request Controller Auth BLL DAL Database

Mediator Pattern Define an object that encapsulates how a set of objects interact

Mediator Pattern Define an object that encapsulates how a set of objects interact

Mediator Pattern Object A Object B

Mediator Pattern Object A Object B

Mediator Pattern Object A Mediator Object B

Mediator Pattern Object A Mediator Object B

Mediat. R https: //github. com/jbogard/Mediat. R

Mediat. R https: //github. com/jbogard/Mediat. R

Mediator Pattern Request encapsulates all information required to perform action

Mediator Pattern Request encapsulates all information required to perform action

Mediat. R ASP. NET Request Mediat. R Request Handler

Mediat. R ASP. NET Request Mediat. R Request Handler

Mediat. R Request Caller Request Mediat. R Handler

Mediat. R Request Caller Request Mediat. R Handler

Mediat. R Request

Mediat. R Request

Mediat. R Request Handler Caller Mediat. R Request Handler

Mediat. R Request Handler Caller Mediat. R Request Handler

Mediat. R Behaviors Request Pipelines Caller Request Mediat. R Pre Process Handler Post Process

Mediat. R Behaviors Request Pipelines Caller Request Mediat. R Pre Process Handler Post Process Handler

Mediat. R Behaviors Request Pipelines ASP. NET Core MVC Request Mediat. R Handler Add

Mediat. R Behaviors Request Pipelines ASP. NET Core MVC Request Mediat. R Handler Add to Cart Logger

Mediat. R Notifications Publish + Subscribe Caller Notification Handler Mediat. R Handler

Mediat. R Notifications Publish + Subscribe Caller Notification Handler Mediat. R Handler

Organize By Layer Controllers/Shopping. Cart. Controller. cs View. Models/Shopping. Cart. View. Model. cs Models/Shopping.

Organize By Layer Controllers/Shopping. Cart. Controller. cs View. Models/Shopping. Cart. View. Model. cs Models/Shopping. Cart. cs Views/Shoping. Cart/Index. cshtml

Organize By Features Shopping. Cart Add. To. Cart. cs Remove. From. Cart. cs View.

Organize By Features Shopping. Cart Add. To. Cart. cs Remove. From. Cart. cs View. Cart. cshtml Models Shopping. Cart. cs Album. cs Cart. Item. cs

Organize By Layer ASP. NET MVC Authorization Validation Data Access Model Database

Organize By Layer ASP. NET MVC Authorization Validation Data Access Model Database

Organize By Feature Model Database Feature

Organize By Feature Model Database Feature

Single Feature Controller Authorization Validation Execution Model Database

Single Feature Controller Authorization Validation Execution Model Database

Single Feature ASP. NET MVC Authorization Fluent Validation Entity Framework Model Database

Single Feature ASP. NET MVC Authorization Fluent Validation Entity Framework Model Database

Single Feature Nancy Authorization Validation Dapper Model Database

Single Feature Nancy Authorization Validation Dapper Model Database

Success! Segregate our code from I/O Mediat. R between integration boundaries Feature Slices not

Success! Segregate our code from I/O Mediat. R between integration boundaries Feature Slices not Layers

Trade-Offs & Notes Runtime Exceptions Tests Analyzer DI Container & Registrations Tests

Trade-Offs & Notes Runtime Exceptions Tests Analyzer DI Container & Registrations Tests

Enabler Async, Task Queues, Pub/Sub Multiple Data Model/Stores Dependencies per Command/Query

Enabler Async, Task Queues, Pub/Sub Multiple Data Model/Stores Dependencies per Command/Query

That’s it… Thanks! Derek Comartin @codeopinion. com

That’s it… Thanks! Derek Comartin @codeopinion. com