SlideShare a Scribd company logo
1 of 36
Enterprise Software Development
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Enterprise Apps
with ASP.NET Core 2.1
.NET User Group Tour – June 2017
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
SSW Solution Architect
Jason Taylor
@JasonGtAu @SSW_TV
codingflow.net
github.com/JasonGT
Developer* Since 1992
1 MHz CPU
20 KB Memory
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Architecture & Design
Persistence Layer
Application Layer
Infrastructure Layer
Presentation Layer
Domain Layer
Agenda
Architecture & Design
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Independent of frameworks
Testable
Independent of UI
Independent of database
Independent of external agency
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Clean Architecture
Unit of Work and Repository Patterns
Should we implement these patterns?
It isn’t always the best choice, because:
• DbContext insulates your code from database changes
• DbContext acts as a unit of work
• DbSet acts as a repository
• EF Core has features for unit testing without repositories
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Independent of frameworks*
Testable
Independent of UI
Independent of database
Independent of external agency
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Clean Architecture
Key Points
Domain contains enterprise-wide types and logic
Application contains application-specific models and logic
Infrastructure (including Persistence) contain all external concerns
Presentation contains frontend apps
Infrastructure and Presentation components can be replaced with
minimal effort
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Domain Layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Overview
Entities
Value Objects
Enumerations
Logic
Exceptions
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Demo
Reviewing the Domain layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Key Points
Use data annotations sparingly
Always define foreign keys
Use value objects when appropriate
Initialise all collections
Create custom domain exceptions
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application Layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Overview
Interfaces
Models
Logic
Validators
Events
Exceptions
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Demo
Reviewing the Application layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Key Points
Use CQRS to simply your overall design
Use MediatR to simplify management of requests / responses,
commands, queries, notifications and events
Know the difference between View Models (VMs) and Data
Transfer Objects (DTOs)
Use FluentValidation for complex validation scenarios
Create custom application exceptions
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Persistence Layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Overview
DbContext
Configurations
Migrations
Seeding
Abstractions
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Demo
Reviewing the Persistence layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Key Points
Independent of the database
Conventions over configuration
Use Fluent API Configuration over Data Annotations
Use an extension to automatically apply all entity type
configurations
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Infrastructure Layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Overview
Clients
File Systems
Email / SMS
System Clock
Anything External
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Demo
Reviewing the Infrastructure layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Key Points
Contains classes for accessing external resources
Implements interfaces within the Application layer
Utilises DTOs defined within the Application layer
No layers depend on Infrastructure layer, e.g.
Presentation layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Presentation Layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Overview
Web Forms
MVC
Razor Pages
Web API
Single Page Apps
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Application
Domain
Presentation
Demo
Reviewing the Presentation layer
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Key Points
Controllers should not contain any application logic
All application logic belongs in the application layer
Utilising Open API bridges the gap between the
frontend and backend
Create and consume well defined view models
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Recommend Resources
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Northwind Traders
A sample application built
using ASP.NET Core and EF
Core.
bit.ly/northwind-traders
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Building Monoliths
Clean Architecture
Azure
aka.ms/webappebook
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Building Microservices
Microservices
Containers
DDD
Azure
aka.ms/microservicesebook
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Clean Architecture
Robert C. Martin
bit.ly/clean-architecture-book
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Questions?
Join the Conversation #EnterpriseApps #AspNetCore @JasonGtAu
Thank you!
info@ssw.com.au
www.ssw.com.au
Sydney | Melbourne | Brisbane

More Related Content

What's hot

Clean architecture
Clean architectureClean architecture
Clean architecture
andbed
 
Fundamentos de Pruebas de Software - Introducción
Fundamentos de Pruebas de Software - IntroducciónFundamentos de Pruebas de Software - Introducción
Fundamentos de Pruebas de Software - Introducción
Professional Testing
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
Wagner Zaparoli
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
kaolong
 

What's hot (20)

Clean architecture
Clean architectureClean architecture
Clean architecture
 
Programacion en sockets informe
Programacion en sockets informeProgramacion en sockets informe
Programacion en sockets informe
 
CQRS
CQRSCQRS
CQRS
 
Fundamentos de Pruebas de Software - Introducción
Fundamentos de Pruebas de Software - IntroducciónFundamentos de Pruebas de Software - Introducción
Fundamentos de Pruebas de Software - Introducción
 
Deconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignDeconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven Design
 
Projeto e Desenvolvimento de Software
Projeto e Desenvolvimento de SoftwareProjeto e Desenvolvimento de Software
Projeto e Desenvolvimento de Software
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Microservicios y contenedores Docker
Microservicios y contenedores DockerMicroservicios y contenedores Docker
Microservicios y contenedores Docker
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones WebMicro Frontends: Rompiendo el monolito en las aplicaciones Web
Micro Frontends: Rompiendo el monolito en las aplicaciones Web
 
FMK Capa de Presentacion
FMK Capa de PresentacionFMK Capa de Presentacion
FMK Capa de Presentacion
 
Infraestructura como codigo
Infraestructura como codigoInfraestructura como codigo
Infraestructura como codigo
 
Especificación de Arquitectura de Software
Especificación de Arquitectura de SoftwareEspecificación de Arquitectura de Software
Especificación de Arquitectura de Software
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
OData Services
OData ServicesOData Services
OData Services
 

Similar to Building Enterprise Apps with ASP.NET Core 2.1

Mix Tech Ed Update No Video
Mix Tech Ed Update No VideoMix Tech Ed Update No Video
Mix Tech Ed Update No Video
AllyWick
 
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan
 

Similar to Building Enterprise Apps with ASP.NET Core 2.1 (20)

Clean Architecture By Jason Taylor
Clean Architecture By Jason TaylorClean Architecture By Jason Taylor
Clean Architecture By Jason Taylor
 
Mix Tech Ed Update No Video
Mix Tech Ed Update No VideoMix Tech Ed Update No Video
Mix Tech Ed Update No Video
 
An agile approach to cloud infrastructure
An agile approach to cloud infrastructureAn agile approach to cloud infrastructure
An agile approach to cloud infrastructure
 
Developing an Enterprise Architecture Capability
Developing an Enterprise Architecture CapabilityDeveloping an Enterprise Architecture Capability
Developing an Enterprise Architecture Capability
 
Resume_A_Vinod
Resume_A_VinodResume_A_Vinod
Resume_A_Vinod
 
J2EE Performance And Scalability Bp
J2EE Performance And Scalability BpJ2EE Performance And Scalability Bp
J2EE Performance And Scalability Bp
 
Asp.net Web Development.pdf
Asp.net Web Development.pdfAsp.net Web Development.pdf
Asp.net Web Development.pdf
 
Visual studio
Visual studioVisual studio
Visual studio
 
What is ASP.NET and Why do we need it?
What is ASP.NET and Why do we need it?What is ASP.NET and Why do we need it?
What is ASP.NET and Why do we need it?
 
Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#Domain Modeling & Full-Stack Web Development F#
Domain Modeling & Full-Stack Web Development F#
 
Experiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamExperiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure team
 
Stephane Lapointe & Alexandre Brisebois: Développer des microservices avec Se...
Stephane Lapointe & Alexandre Brisebois: Développer des microservices avec Se...Stephane Lapointe & Alexandre Brisebois: Développer des microservices avec Se...
Stephane Lapointe & Alexandre Brisebois: Développer des microservices avec Se...
 
Resume: DevOps/Technology Architect - Satya Prakash
Resume: DevOps/Technology Architect   -  Satya PrakashResume: DevOps/Technology Architect   -  Satya Prakash
Resume: DevOps/Technology Architect - Satya Prakash
 
Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2Daniel Egan Msdn Tech Days Oc Day2
Daniel Egan Msdn Tech Days Oc Day2
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstElements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code First
 
Visual Studio.NET
Visual Studio.NETVisual Studio.NET
Visual Studio.NET
 
Titanium presentation
Titanium presentationTitanium presentation
Titanium presentation
 
All the amazing features of asp.net core
All the amazing features of asp.net coreAll the amazing features of asp.net core
All the amazing features of asp.net core
 
.NET Overview & Roadmap
.NET Overview & Roadmap.NET Overview & Roadmap
.NET Overview & Roadmap
 
Soprex framework on .net in action
Soprex framework on .net in actionSoprex framework on .net in action
Soprex framework on .net in action
 

Recently uploaded

JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
Max Lee
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
Alluxio, Inc.
 

Recently uploaded (20)

Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning Framework
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 
5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand5 Reasons Driving Warehouse Management Systems Demand
5 Reasons Driving Warehouse Management Systems Demand
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)JustNaik Solution Deck (stage bus sector)
JustNaik Solution Deck (stage bus sector)
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
 
CompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdfCompTIA Security+ (Study Notes) for cs.pdf
CompTIA Security+ (Study Notes) for cs.pdf
 
How to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabberHow to install and activate eGrabber JobGrabber
How to install and activate eGrabber JobGrabber
 
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdfImplementing KPIs and Right Metrics for Agile Delivery Teams.pdf
Implementing KPIs and Right Metrics for Agile Delivery Teams.pdf
 
IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024IT Software Development Resume, Vaibhav jha 2024
IT Software Development Resume, Vaibhav jha 2024
 
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purityAPVP,apvp apvp High quality supplier safe spot transport, 98% purity
APVP,apvp apvp High quality supplier safe spot transport, 98% purity
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product UpdatesGraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
GraphSummit Stockholm - Neo4j - Knowledge Graphs and Product Updates
 
A Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data MigrationA Guideline to Zendesk to Re:amaze Data Migration
A Guideline to Zendesk to Re:amaze Data Migration
 
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
Facemoji Keyboard released its 2023 State of Emoji report, outlining the most...
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024
 
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdfMicrosoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
Microsoft 365 Copilot; An AI tool changing the world of work _PDF.pdf
 

Building Enterprise Apps with ASP.NET Core 2.1

Editor's Notes

  1. Now I have an i7 with 16GB of RAM and it’s too slow. Plus there’s no tape drive so that kind of sucks.
  2. Todo: Talk about the dependency inversion principle. Todo: Talk about the interfaces within the core. Todo: Show alternative stacks.
  3. Todo: Talk about the dependency inversion principle. Todo: Talk about the interfaces within the core. Todo: Show alternative stacks.
  4. Todo: Mention how I have tried to break the application up by feature – products, orders, customers, and so on. I might not have it quite right yet – time will tell – but it’s a good start. Segregating the application this way make’s it obvious what’s important, and give me a logical starting pointing should I need to break it up into microservices.
  5. Todo: Mention how I have tried to break the application up by feature – products, orders, customers, and so on. I might not have it quite right yet – time will tell – but it’s a good start. Segregating the application this way make’s it obvious what’s important, and give me a logical starting pointing should I need to break it up into microservices.
  6. Todo: Mention how I have tried to break the application up by feature – products, orders, customers, and so on. I might not have it quite right yet – time will tell – but it’s a good start. Segregating the application this way make’s it obvious what’s important, and give me a logical starting pointing should I need to break it up into microservices.
  7. Todo: Mention how I have tried to break the application up by feature – products, orders, customers, and so on. I might not have it quite right yet – time will tell – but it’s a good start. Segregating the application this way make’s it obvious what’s important, and give me a logical starting pointing should I need to break it up into microservices.
  8. Todo: Mention how I have tried to break the application up by feature – products, orders, customers, and so on. I might not have it quite right yet – time will tell – but it’s a good start. Segregating the application this way make’s it obvious what’s important, and give me a logical starting pointing should I need to break it up into microservices.