Skip to content
Gary Woodfine edited this page Apr 6, 2022 · 4 revisions

Introduction

This project initially started off as a repository for a sample project on how to create project template in .net core which then subsequently resulted into a number of questions and enquiries over email.

This project continues to evolve as more developers start to find it useful, I have subsequently posted Update to API Project template to discuss some of the changes made to the project and the rational behind them.

The project template that is generated is to enable the implementation of the Vertical Slice Architecture, then intention of this Wiki is to provide further relevant information on how to use the features of the template to develop projects using Vertical Slice Architecture.

What is Vertical Slicing

Vertical Slicing is used within the Agile methodology to enable the slimming down of work items to a narrow focus, essentially breaking work down into smaller pieces. However, the pieces should be stand-alone deliverable functionality. The piece of the system that works on it own.

The Work items have just enough scope and functionality, plus just enough coverage across all system components involved to be fully functional.

Breaking a system down into Vertical Slices is just as much art as it is science, to determine what is enough, or is too much. This is also often a factor of a software development teams output.

The primary objective of Vertical Slicing to break up work into features and functionality into more bite sized pieces of work, for an Agile Software development to go execute.

Vertical Slice of System Layers

There are typically common areas of a system Such as:

  • User Interace
  • API Layer
  • Data Store

Also within each of those layers there are additional layers, for instance in any given API Call, there will be typically be:

  • Resource - Name of a Data Entity that
  • Endpoint - A public available function to perform an action, typically using an REST verbs those are GET, POST, PUT, PATCH, DELETE etc.
  • Request - An object to contain details of the data details required to perform an operation, using terms from CQRS these are typically Query or Command objects.
  • Response - Format of the data to return
  • Mapping - Code to transform Request and Response objects to and from their Data Representations
  • Validator - Code to perform data validation
  • Handler - a class to conduct the business logic as required
  • Unit Of Work - a data repository to layer to interact of the Database
  • Logging - Event and Audit logging capabilities
  • Database - Store all data
  • Caching - A caching layer to store popular or widely used data.
Clone this wiki locally