Vertical Feature Slices Not Layers Derek Comartin codeopinion Slides: 60 Download presentation Vertical Feature Slices Not Layers Derek Comartin @codeopinion. com Context Tech Clients & Server Authorization Authorization Data Access Validation Authorization Data Access 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 Server HTTP Only Clients ASP. NET Clients Database Scheduled / Reoccurring Non HTTP Requests Minimize Coupling to a Framework Common Interface to Invoke Functionality 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. cs MVC/Views/Products/View. cshtml Layered MVC Auth BLL DAL Database Request-Response Controller Uniform API Database CQRS Request Controller Auth BLL DAL Database Mediator Pattern Define an object that encapsulates how a set of objects interact Mediator Pattern Object A Object B Mediator Pattern Object A Mediator Object B Mediat. R https: //github. com/jbogard/Mediat. R Mediator Pattern Request encapsulates all information required to perform action Mediat. R ASP. NET Request Mediat. R Request Handler Mediat. R Request Caller Request Mediat. R Handler Mediat. R Request Mediat. R Request Handler Caller Mediat. R Request Handler 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 to Cart Logger 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. Cart. cs Views/Shoping. Cart/Index. cshtml 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 Feature Model Database Feature Single Feature Controller Authorization Validation Execution Model Database Single Feature ASP. NET MVC Authorization Fluent Validation Entity Framework 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 Layers 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 That’s it… Thanks! Derek Comartin @codeopinion. com