SlideShare a Scribd company logo
Building a Service Oriented SystemPart 1: Introduction Dennis Doomen
Agenda Uitgangspunten & Visie Eisenaan de idealearchitectuur De idealearchitectuur Web Service Software Factory: Modeling Edition
Bedoeldvoorgroteresystemen Mogelijkmeerdere frontends Voorbereid op koppelingen met externesystemen Conformeertaan patterns, maar welpragmatisch Microsoft, unless… Uitgangspunten
Visie External System Internet Extranet / DMZ Website Silverlight Client Intranet Sharepoint Portals Office Business Apps Smart Client Enterprise Service Bus Application Server Internal System
Schaalbaar met eenhogedoorvoersnelheid (!) Ontkoppeld Testbaar Veilig en betrouwbaar Agile De idealearchitectuur is…
Overzicht Service Interfaces Service Contracts Data Contracts Host Service Implementation Message Contracts Business Logic Business Actions Business Workflows Business Entities Resource Access Repositories Service Agents Database
Services Verantwoordelijkheden Doorgeefluik naar Business Actions Business georiënteerd, niet technisch/applicatie (!) Identificatie o.b.v. functionele sleutels Verzorgt (protocol-afhankelijke) authenticatie Schermt technische fouten af
Services Aandachtspunten Chunky messages (i.p.v. chatty) Naamgeving moet consistent en intuïtief zijn Documenteer services centraal Altijd expliciete request en response berichten Gebruik altijd een WCF wrapper namespace Retourneer functionele unieke codes voor business rule violations
Business Entities Verantwoordelijkheden Vangengedrag en conceptenuit het domein Bevattenallebedrijfsregels en constraints Hebben (in principe) altijdeenfunctionelesleutel Zijn Persistency Ignorant Ontworpen conform de OO-regels en design patterns zodatbedrijfsregels/logicamakkelijkaanpasbaar is
Business Entities Aandachtspunten Ontwerpvolgens de DDD gedachte Gebruik UML class diagrammen Identificeeraggregratierelaties Bepaal cascading gedraga.d.h. aggregratie Implementeervolgens Active Record of Domain Model design pattern Gebruik VAB of Data Annotations voorvalidatie Mogelijk de scope van unittests
Voorbeeld Business Entity Model
Business (Process) Actions Verantwoordelijkheden Kortdurende Units-of-Work Bepalen levensduur van ACID transacties Kan de scope zijn voor unittests Controleren autorisatie Verwerken request en response berichtenuit service interfaces Vertalingtussen data contracten (DTOs) en entiteiten
Business (Process) Actions Aandachtspunten Nooitgedistribueerdetransactiesgebruiken Minimalevalidatie van berichten Besteedt DTO validatieuitaanentiteiten Log op eenslimmemanierzodat auditing mogelijk is Controleeralleen inter-entity rules
Repositories Verantwoordelijkheden Regelentoegang tot de database Gedraagtzichalseencollectie van entiteiten (interface lijkt op die van ICollection) Zouvolgens Transparent Persistency pattern moetenwerken, dus Lazy loading en Automatic flushing Verzorgtoptimalisatieszoals caching Vervangt database excepties door functioneleexcepties
Repositories Aandachtspunten Gebruikeen ORM zoalsb.v. NHibernate / EF4 Eén repository per aggregratie root uit het domein model Gebruik interfaces om de database tekunnenfaken ImplementeerIQueryable (LINQ) Gebruik Query Object of Specification patterns
Service Agents Verantwoordelijkheden Technische details van de externesystemenafschermen Beperkt impact van wijzigingen Vertalingtussen interne en externe accounts (single single-on) Biedtadditioneledienstenzoals caching Resistenttegen (tijdelijke) afwezigheid of netwerkproblemen Verzorgt monitoring en tracing van externesystemen
Service Agents Aandachtspunten Gebruik interfaces omexterneafhankelijkhedentekunnenmocken Ook reporting servers en/of file I/O moeten via een service agent verlopen Moeten in principe via een workflow wordengebruikt
Business Workflows Verantwoordelijkheden Langdurende (asynchrone) units-of-work Units-of-work waarbijexternesystemenbetrokkenzijn Gebruikt compensating transactions tijdenseen rollback Aandachtspunten Windows Workflow Foundation is lastigteintegreren met WCF Makkelijkergeworden met .NET 3.5 (WorkflowServiceHost) WF is (nog) afhankelijk van SQL Server (Tip: WFTools project op CodePlex) Koppelingtussen WF en Domain Model o.b.v. functionelesleutels
Schaalbaar met eenhogedoorvoersnelheid Geen state (behalve de database) Caching (evt. gedistribueerd) Services zijnautonoom Geengedistribueerdetransactie’s Logica in .NET, tenzijereen bottleneck is Loadtestsvoorperformancemetingenom die bottlenecks tevinden Evaluatiet.o.v. ideaal
Ontkoppeld Service agents Platformonafhankelijke Web service technologie Interfaces en dependency injection tussenlagen en componenten Testbaar Test Driven Development alsuitgangspunt Mocken van repository/service agents interfaces Unittesten op business procesniveau en business entity niveau, eventueelzonder live database Evaluatie t.o.v. ideaal
Veilig en betrouwbaar Authenticatie op service niveau Autorisatie op business process niveau Exception shielding Logging/tracing, timeout controles FxCop, StyleCopvoor code kwaliteit, uniformemanier van werken Services validerenberichtentegen interne fouten Evaluatie t.o.v. ideaal
Agile Design Patterns om de ilities te garanderen Bedrijfslogica gecentraliseerd in domain model Unittests om kwaliteit te waarborgen Geen technische afhankelijkheid van database Evaluatie t.o.v. ideaal
Web Service Software Factory Service Interfaces Service Contracts Data Contracts Host Code wordt gegenereerd vanuit data contract, service contract en host modellen Service Implementation Message Contracts Business Logic Business Actions Business Workflows Projectenstructuur wordt door Guidance Automation Recipe aangemaakt Business Entities Resource Access Repositories Service Agents Database
Web Service Software Factory
Demo
Vragen? dennis.doomen@avivasolutions.nl ddoomen@twitter www.dennisdoomen.net
Resources Aviva Solutions blog (nieuwste versie van sheets & demoproject)http://blog.avivasolutions.nl Web Service Software Factory: Modeling Editionhttp://msdn.microsoft.com/en-us/library/cc487895.aspx P&P Application Architecture Guide 2.0http://www.codeplex.com/AppArch Applying Domain Driven Design & Patterns, Jimmy Nilssonhttp://domaindrivendesign.org/books/index.html#DDD_apply Workflow Foundation Toolshttp://www.codeplex.com/WFTools

More Related Content

Similar to Building a Service Oriented System: An Introduction

Business Process Execution Language (BPEL)
Business Process Execution Language (BPEL)Business Process Execution Language (BPEL)
Business Process Execution Language (BPEL)
Richard Claassens CIPPE
 
The DOC - Oracle APEX features
The DOC - Oracle APEX featuresThe DOC - Oracle APEX features
The DOC - Oracle APEX features
gleduc
 
Outsourcing
OutsourcingOutsourcing
OutsourcingTechdocs
 
D0R29A-Sessie5a-20071031
D0R29A-Sessie5a-20071031D0R29A-Sessie5a-20071031
D0R29A-Sessie5a-20071031Tom.Broos
 
Quickr Connectors and ECM
Quickr Connectors and ECMQuickr Connectors and ECM
Quickr Connectors and ECM
Richard van Delft
 
Grip Op Applicatie Management Computable (14 November 2006)
Grip Op Applicatie Management Computable (14 November 2006)Grip Op Applicatie Management Computable (14 November 2006)
Grip Op Applicatie Management Computable (14 November 2006)
Edwin Groenewegen
 
Lotus Connections - Profiles (beheer & development)
Lotus Connections - Profiles (beheer & development)Lotus Connections - Profiles (beheer & development)
Lotus Connections - Profiles (beheer & development)
Richard van Delft
 
Logging En Monitoring Presentatie Met Penetratie Testen 0.5
Logging En Monitoring Presentatie Met Penetratie Testen 0.5Logging En Monitoring Presentatie Met Penetratie Testen 0.5
Logging En Monitoring Presentatie Met Penetratie Testen 0.5
Ferdinand_u
 
Atos Origin
Atos OriginAtos Origin
Atos Origin
Guus Disselkoen
 
Sdb Presentatie
Sdb PresentatieSdb Presentatie
Sdb Presentatie
menfey
 
Biz Talk 2006 Orchestration Vs Messaging
Biz Talk 2006 Orchestration Vs MessagingBiz Talk 2006 Orchestration Vs Messaging
Biz Talk 2006 Orchestration Vs Messaging
Steef-Jan Wiggers
 
Topdesk - Azure Devops koppeling
Topdesk - Azure Devops koppelingTopdesk - Azure Devops koppeling
Topdesk - Azure Devops koppeling
Delta-N
 
Systematische Aanpak Applicatie Performance
Systematische Aanpak Applicatie PerformanceSystematische Aanpak Applicatie Performance
Systematische Aanpak Applicatie Performance
Peter HJ van Eijk
 
Alles draait nu weer om Back Office Processen - Rik Douwes
Alles draait nu weer om Back Office Processen - Rik DouwesAlles draait nu weer om Back Office Processen - Rik Douwes
Alles draait nu weer om Back Office Processen - Rik Douwesbankingreviewnl
 
Presentatie over BPEL
Presentatie over BPELPresentatie over BPEL
Presentatie over BPEL
Richard Claassens CIPPE
 
Webinar VSTS migratie
Webinar VSTS migratieWebinar VSTS migratie
Webinar VSTS migratie
Delta-N
 
IMPACT Framework en Evaluatie by Clemens Neudecker
IMPACT Framework en Evaluatie by Clemens NeudeckerIMPACT Framework en Evaluatie by Clemens Neudecker
IMPACT Framework en Evaluatie by Clemens Neudecker
IMPACT Centre of Competence
 

Similar to Building a Service Oriented System: An Introduction (20)

Business Process Execution Language (BPEL)
Business Process Execution Language (BPEL)Business Process Execution Language (BPEL)
Business Process Execution Language (BPEL)
 
The DOC - Oracle APEX features
The DOC - Oracle APEX featuresThe DOC - Oracle APEX features
The DOC - Oracle APEX features
 
Outsourcing
OutsourcingOutsourcing
Outsourcing
 
D0R29A-Sessie5a-20071031
D0R29A-Sessie5a-20071031D0R29A-Sessie5a-20071031
D0R29A-Sessie5a-20071031
 
Webservices
WebservicesWebservices
Webservices
 
Quickr Connectors and ECM
Quickr Connectors and ECMQuickr Connectors and ECM
Quickr Connectors and ECM
 
Cordys Business Operations Platform
Cordys Business Operations PlatformCordys Business Operations Platform
Cordys Business Operations Platform
 
Grip Op Applicatie Management Computable (14 November 2006)
Grip Op Applicatie Management Computable (14 November 2006)Grip Op Applicatie Management Computable (14 November 2006)
Grip Op Applicatie Management Computable (14 November 2006)
 
Lotus Connections - Profiles (beheer & development)
Lotus Connections - Profiles (beheer & development)Lotus Connections - Profiles (beheer & development)
Lotus Connections - Profiles (beheer & development)
 
Logging En Monitoring Presentatie Met Penetratie Testen 0.5
Logging En Monitoring Presentatie Met Penetratie Testen 0.5Logging En Monitoring Presentatie Met Penetratie Testen 0.5
Logging En Monitoring Presentatie Met Penetratie Testen 0.5
 
Atos Origin
Atos OriginAtos Origin
Atos Origin
 
Sdb Presentatie
Sdb PresentatieSdb Presentatie
Sdb Presentatie
 
Biz Talk 2006 Orchestration Vs Messaging
Biz Talk 2006 Orchestration Vs MessagingBiz Talk 2006 Orchestration Vs Messaging
Biz Talk 2006 Orchestration Vs Messaging
 
Topdesk - Azure Devops koppeling
Topdesk - Azure Devops koppelingTopdesk - Azure Devops koppeling
Topdesk - Azure Devops koppeling
 
Systematische Aanpak Applicatie Performance
Systematische Aanpak Applicatie PerformanceSystematische Aanpak Applicatie Performance
Systematische Aanpak Applicatie Performance
 
Alles draait nu weer om Back Office Processen - Rik Douwes
Alles draait nu weer om Back Office Processen - Rik DouwesAlles draait nu weer om Back Office Processen - Rik Douwes
Alles draait nu weer om Back Office Processen - Rik Douwes
 
RES Automation Manager brochure
RES Automation Manager brochureRES Automation Manager brochure
RES Automation Manager brochure
 
Presentatie over BPEL
Presentatie over BPELPresentatie over BPEL
Presentatie over BPEL
 
Webinar VSTS migratie
Webinar VSTS migratieWebinar VSTS migratie
Webinar VSTS migratie
 
IMPACT Framework en Evaluatie by Clemens Neudecker
IMPACT Framework en Evaluatie by Clemens NeudeckerIMPACT Framework en Evaluatie by Clemens Neudecker
IMPACT Framework en Evaluatie by Clemens Neudecker
 

More from Dennis Doomen

Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)
Dennis Doomen
 
Tools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy codeTools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy code
Dennis Doomen
 
What you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloadsWhat you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloads
Dennis Doomen
 
Getting a grip on your code dependencies
Getting a grip on your code dependenciesGetting a grip on your code dependencies
Getting a grip on your code dependencies
Dennis Doomen
 
My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)
Dennis Doomen
 
Design patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NETDesign patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NET
Dennis Doomen
 
Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#
Dennis Doomen
 
What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)
Dennis Doomen
 
Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!
Dennis Doomen
 
50 things software teams should not do.pptx
50 things software teams should not do.pptx50 things software teams should not do.pptx
50 things software teams should not do.pptx
Dennis Doomen
 
What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?
Dennis Doomen
 
A lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable codeA lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable code
Dennis Doomen
 
How to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the FootHow to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the Foot
Dennis Doomen
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservices
Dennis Doomen
 
Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)
Dennis Doomen
 
Practical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event SourcingPractical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event Sourcing
Dennis Doomen
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the foot
Dennis Doomen
 
Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)
Dennis Doomen
 
A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)
Dennis Doomen
 
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software developmentLessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Dennis Doomen
 

More from Dennis Doomen (20)

Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)Getting a grip on your code dependencies (2023-10)
Getting a grip on your code dependencies (2023-10)
 
Tools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy codeTools and practices to help you deal with legacy code
Tools and practices to help you deal with legacy code
 
What you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloadsWhat you can learn from an open-source project with 250 million downloads
What you can learn from an open-source project with 250 million downloads
 
Getting a grip on your code dependencies
Getting a grip on your code dependenciesGetting a grip on your code dependencies
Getting a grip on your code dependencies
 
My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)My Laws of Test Driven Development (2023)
My Laws of Test Driven Development (2023)
 
Design patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NETDesign patterns for Event Sourcing in .NET
Design patterns for Event Sourcing in .NET
 
Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#Automate Infrastructure with Pulumi and C#
Automate Infrastructure with Pulumi and C#
 
What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)What is the right unit in unit testing (UpdateConf 2022)
What is the right unit in unit testing (UpdateConf 2022)
 
Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!Slow Event Sourcing (re)projections - Just make them faster!
Slow Event Sourcing (re)projections - Just make them faster!
 
50 things software teams should not do.pptx
50 things software teams should not do.pptx50 things software teams should not do.pptx
50 things software teams should not do.pptx
 
What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?What is the right "unit" in unit testing and why it is not a class?
What is the right "unit" in unit testing and why it is not a class?
 
A lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable codeA lab around the principles and practices for writing maintainable code
A lab around the principles and practices for writing maintainable code
 
How to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the FootHow to Practice TDD Without Shooting Yourself in the Foot
How to Practice TDD Without Shooting Yourself in the Foot
 
Decomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservicesDecomposing the Monolith using modern-day .NET and a touch of microservices
Decomposing the Monolith using modern-day .NET and a touch of microservices
 
Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)Event Sourcing from the Trenches (DDD Europe 2020)
Event Sourcing from the Trenches (DDD Europe 2020)
 
Practical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event SourcingPractical introduction to DDD, CQRS and Event Sourcing
Practical introduction to DDD, CQRS and Event Sourcing
 
How to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the footHow to practice TDD without shooting yourself in the foot
How to practice TDD without shooting yourself in the foot
 
Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)Decomposing the Monolith (Riga Dev Days 2019)
Decomposing the Monolith (Riga Dev Days 2019)
 
A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)A lab around the principles and practices for writing maintainable code (2019)
A lab around the principles and practices for writing maintainable code (2019)
 
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software developmentLessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
 

Building a Service Oriented System: An Introduction

  • 1. Building a Service Oriented SystemPart 1: Introduction Dennis Doomen
  • 2. Agenda Uitgangspunten & Visie Eisenaan de idealearchitectuur De idealearchitectuur Web Service Software Factory: Modeling Edition
  • 3. Bedoeldvoorgroteresystemen Mogelijkmeerdere frontends Voorbereid op koppelingen met externesystemen Conformeertaan patterns, maar welpragmatisch Microsoft, unless… Uitgangspunten
  • 4. Visie External System Internet Extranet / DMZ Website Silverlight Client Intranet Sharepoint Portals Office Business Apps Smart Client Enterprise Service Bus Application Server Internal System
  • 5. Schaalbaar met eenhogedoorvoersnelheid (!) Ontkoppeld Testbaar Veilig en betrouwbaar Agile De idealearchitectuur is…
  • 6. Overzicht Service Interfaces Service Contracts Data Contracts Host Service Implementation Message Contracts Business Logic Business Actions Business Workflows Business Entities Resource Access Repositories Service Agents Database
  • 7. Services Verantwoordelijkheden Doorgeefluik naar Business Actions Business georiënteerd, niet technisch/applicatie (!) Identificatie o.b.v. functionele sleutels Verzorgt (protocol-afhankelijke) authenticatie Schermt technische fouten af
  • 8. Services Aandachtspunten Chunky messages (i.p.v. chatty) Naamgeving moet consistent en intuïtief zijn Documenteer services centraal Altijd expliciete request en response berichten Gebruik altijd een WCF wrapper namespace Retourneer functionele unieke codes voor business rule violations
  • 9. Business Entities Verantwoordelijkheden Vangengedrag en conceptenuit het domein Bevattenallebedrijfsregels en constraints Hebben (in principe) altijdeenfunctionelesleutel Zijn Persistency Ignorant Ontworpen conform de OO-regels en design patterns zodatbedrijfsregels/logicamakkelijkaanpasbaar is
  • 10. Business Entities Aandachtspunten Ontwerpvolgens de DDD gedachte Gebruik UML class diagrammen Identificeeraggregratierelaties Bepaal cascading gedraga.d.h. aggregratie Implementeervolgens Active Record of Domain Model design pattern Gebruik VAB of Data Annotations voorvalidatie Mogelijk de scope van unittests
  • 12. Business (Process) Actions Verantwoordelijkheden Kortdurende Units-of-Work Bepalen levensduur van ACID transacties Kan de scope zijn voor unittests Controleren autorisatie Verwerken request en response berichtenuit service interfaces Vertalingtussen data contracten (DTOs) en entiteiten
  • 13. Business (Process) Actions Aandachtspunten Nooitgedistribueerdetransactiesgebruiken Minimalevalidatie van berichten Besteedt DTO validatieuitaanentiteiten Log op eenslimmemanierzodat auditing mogelijk is Controleeralleen inter-entity rules
  • 14. Repositories Verantwoordelijkheden Regelentoegang tot de database Gedraagtzichalseencollectie van entiteiten (interface lijkt op die van ICollection) Zouvolgens Transparent Persistency pattern moetenwerken, dus Lazy loading en Automatic flushing Verzorgtoptimalisatieszoals caching Vervangt database excepties door functioneleexcepties
  • 15. Repositories Aandachtspunten Gebruikeen ORM zoalsb.v. NHibernate / EF4 Eén repository per aggregratie root uit het domein model Gebruik interfaces om de database tekunnenfaken ImplementeerIQueryable (LINQ) Gebruik Query Object of Specification patterns
  • 16. Service Agents Verantwoordelijkheden Technische details van de externesystemenafschermen Beperkt impact van wijzigingen Vertalingtussen interne en externe accounts (single single-on) Biedtadditioneledienstenzoals caching Resistenttegen (tijdelijke) afwezigheid of netwerkproblemen Verzorgt monitoring en tracing van externesystemen
  • 17. Service Agents Aandachtspunten Gebruik interfaces omexterneafhankelijkhedentekunnenmocken Ook reporting servers en/of file I/O moeten via een service agent verlopen Moeten in principe via een workflow wordengebruikt
  • 18. Business Workflows Verantwoordelijkheden Langdurende (asynchrone) units-of-work Units-of-work waarbijexternesystemenbetrokkenzijn Gebruikt compensating transactions tijdenseen rollback Aandachtspunten Windows Workflow Foundation is lastigteintegreren met WCF Makkelijkergeworden met .NET 3.5 (WorkflowServiceHost) WF is (nog) afhankelijk van SQL Server (Tip: WFTools project op CodePlex) Koppelingtussen WF en Domain Model o.b.v. functionelesleutels
  • 19. Schaalbaar met eenhogedoorvoersnelheid Geen state (behalve de database) Caching (evt. gedistribueerd) Services zijnautonoom Geengedistribueerdetransactie’s Logica in .NET, tenzijereen bottleneck is Loadtestsvoorperformancemetingenom die bottlenecks tevinden Evaluatiet.o.v. ideaal
  • 20. Ontkoppeld Service agents Platformonafhankelijke Web service technologie Interfaces en dependency injection tussenlagen en componenten Testbaar Test Driven Development alsuitgangspunt Mocken van repository/service agents interfaces Unittesten op business procesniveau en business entity niveau, eventueelzonder live database Evaluatie t.o.v. ideaal
  • 21. Veilig en betrouwbaar Authenticatie op service niveau Autorisatie op business process niveau Exception shielding Logging/tracing, timeout controles FxCop, StyleCopvoor code kwaliteit, uniformemanier van werken Services validerenberichtentegen interne fouten Evaluatie t.o.v. ideaal
  • 22. Agile Design Patterns om de ilities te garanderen Bedrijfslogica gecentraliseerd in domain model Unittests om kwaliteit te waarborgen Geen technische afhankelijkheid van database Evaluatie t.o.v. ideaal
  • 23. Web Service Software Factory Service Interfaces Service Contracts Data Contracts Host Code wordt gegenereerd vanuit data contract, service contract en host modellen Service Implementation Message Contracts Business Logic Business Actions Business Workflows Projectenstructuur wordt door Guidance Automation Recipe aangemaakt Business Entities Resource Access Repositories Service Agents Database
  • 25. Demo
  • 27. Resources Aviva Solutions blog (nieuwste versie van sheets & demoproject)http://blog.avivasolutions.nl Web Service Software Factory: Modeling Editionhttp://msdn.microsoft.com/en-us/library/cc487895.aspx P&P Application Architecture Guide 2.0http://www.codeplex.com/AppArch Applying Domain Driven Design & Patterns, Jimmy Nilssonhttp://domaindrivendesign.org/books/index.html#DDD_apply Workflow Foundation Toolshttp://www.codeplex.com/WFTools

Editor's Notes

  1. De referentiearchitectuur is bedoeldvoorgroteresystemenwaarbijverwachtwordtdatermeerdere frontends gebouwdzullenworden (o.a. Web, Windows, WPF, Silverlgiht, Mobile) of daterkoppelingen met anderesystemennodigzijn. De technischeoplossingsrichtingprobeertzichteconformerenaanbekende design patterns, maar waarnodigwordteenmeerpragmatischeinsteekgekozen, ook al gaatdat ten koste van eenpuurontwerp. En in principegaikuit van Microsoft componenten, maar waar Microsoft nogeen gat heeft, kiesikvoor open-source.
  2. Vaak begint een opdracht als een simpele website die vanwege beveiliging opgesplitst moet worden in een webserver en een applicatieserver. Maar vaak zie dat een klant een aantal systemen kent die op termijn jusit goed te koppelen zijn. Bovendien introduceer je hiermee de potentie voor nieuwe ontwikkelen zoals integratie met Sharepoint of Office Business Applications.
  3. De ideale architectuur is volgens mijSchaalbaarAls de belasting toeneemt, dan bepaalt de schaalbaarheid in hoeverre het systeem daar op kan worden aangepast zonder code te wijzigen. Een applicatieserver is daarbij in principe ook schaalbaarder dan een database. Uiteraard moet het systeem ook een hoge doorvoersnelheid hebben. Het uitroepteken staat er bij omdat ik vind dat performance niet te zwaar moet worden ingezet. Het is veel efficiënter om later de bottlenecks boven water te krijgen en die op te lossen dan op micro-niveau te optimaliseren. OntkoppeldDe technische details van externe systemen zijn ingekapseldCommunicatie verloopt via standaard protocollen (ook met clients)Ook het soort database zou daarbij van ondergeschikt belang moeten zijn.TestbaarKan worden getest met unit tests zonder dat er een database of extern systeem beschikbaar moet zijn.Gebruik Test Driven Development (TDD) om te streven naar een hoge mate van testbaarheid, hoge coverage en hoge kwaliteit.Veilig en betrouwbaarGebruikt altijd authenticatie om gebruikers te validerenToegang via autorisatie is op service-niveau in te stellen.Interne fouten worden afgeschermd tegen hackers.De status en crucialestappen in het bedrijfsproces van het systeemmoettevolgenzijnDe communicatie met externesystemen is tetracen/monitoren (b.v. timeouts, tijdelijkeuitval, e.d.)Hackers mogen het systeemnietkunnenplatleggen door incorrect data teversturenAgileIs makkelijk aanpasbaar aan nieuwe of gewijzigde functionele eisen NieuwetechnologievindtsneleenplaatsNiet alleen moet de impact snel te bepalen zijnDekwaliteit moetten alle tijden gewaarborgd blijven.
  4. Service InterfacesIdealiter begin je met met het identificeren van de service contracten (services en methodes).Vrijwelmeteendaarna (of zelfstegelijkertijd) komendaar de ingaande en uitgaandeberichtenbij.Als je temakenhebt met herbruikbare data structuren (entiteiten of zogenaamde DTOs), identificeer die als data contracts.Uiteraardheb je ookeenimplementatieclassnodig die het service contract implementeert. Dit is overigensalleeneendoorgeefluik.En de host is verantwoordelijkvoor het aanbieden van de contracten op eenspecifiek endpoint en de WS-protocollen die daarbijgebruiktmoetenworden. Ditkan IIS zijn, in-process of WAS.Business LogicDe Service Implementations zijnnietmeerdandoorgeefluikenvooreenstap in het bedrijfsproces. De business actions zijnverantwoordelijkvoor de atomaireacties. Allebedrijfslogica is gevangen in eennetwerk van classes met entiteitenvoor elk concept uit het domein (conform Fowler’s domain model). Resource AccessDe entiteitenwordenuiteindelijk in de database opgeslagen, maar via repositories opgehaald. Dezeabstraheert de specifieke details van een database data model en regelenzakenalsenheritance mapping, koppeltabbellen, e.d..Toegang tot externesystemenwordenaltijdingekapseld in Service Agents. Dezeschermenalletechnische details af die met het externesysteemtemakenhebbenaf.Vanwege het feitdat de controlebij het aanroepen van externesystemenuithanden is, en ptoentieellangkanduren, zoutoegang tot externesystemen via een workflow moetenverlopen. Dezezorgtdatfoutenafgehandeldworden met compensating transactions.
  5. Services moeten ontworpen worden met het bedrijfsproces in het achterhoofd. Het beste is om deze samen met de domeinspecialisten te bedenken. Let op, in de praktijk worden de eerste services vaak wel vanuit een specifieke applicatie bedacht. Mits de genericiteit is meegenomen, hoeft dat niet persee een slechte zaak te zijn. Vaak is dat de manier om een organisatie voor te bereiden op SOA.Identificatie van DTOs moet altijd verlopen o.b.v. een functionele sleutel, eventueel aangevuld met een versienummer. De services verzorgen de authenticatie van de aanroepende gebruikers. Windows Authenticatie heeft de voorkeur, maar hoe dit verloopt is afhankelijk van de WS-* protocollen van de service interfaces. Interne technische fouten worden altijd afgevangen door de servicelaag zodat technische details over de interne structuur nooit bij de aanroepende partij komt.
  6. Services moeten gebouwd zijn met het netwerk als communicatiemedium. M.a.w. services zijn zo bedacht dat het aantal round-trips beperkt blijven. Eisen aan naamgeving van service operations, message contracts en data contracts moeten van te voren vastgelegd worden zodat consistentie bewaakt is. WCF ondersteunt geen mechanisme om textuele documentatie over services te publiceren, dus de naamgeving moet vanzelfsprekend zijn. Leg een centrale document of Wiki aan met een overzicht van de services en hun functionaliteit. .NET en WCF bieden hier eigenlijk geen goede functionaliteit voor. Definieer altijd een expliciet reques en response bericht, ook al zijn ze nog leeg. Het toevoegen van een nieuw attribuut aan een lege message is geen breakingchange Definieer tevens altijd een WCF wrapper (name en namespace) zodat het message contract altijd een container object bevat, ook al kent je bericht pas een enkel attribuut. Het toevoegen van de wrapper (vereist bij meerdere attributen) is breaking Alle functionele fouten die als SOAP Fault geretourneerd worden moeten een unieke code krijgen die ook beschreven worden. Alleen dan kan een client programmatische acties ondernemen.
  7. Entities zijn gemodelleerd vanuit concepten, objecten en personen uit het domein. Ze bevatten alle bedrijfsregels en constraints die nodig zijn om de integriteit van het domein te bewaren. Overigens zullen simpele constraints vaak al door de database worden bewaakt. Een entiteit moet in principe altijd een functionele sleutel hebben zodat die gebruikt kan worden buiten de systeemgrenzen. Maar in de praktijk introduceer je die sleutel pas als de entiteit via een DTO via de service wordt aangeboden. 100% PI is in de praktijk erg lastig, maar in principe wil je geen database-afhankelijke code (b.v. ORM) in je domein model. Afhankelijkheden met andere lagen en componenten moeten altijd via interfaces en b.v. DI of IoC plaatsvinden. Een puur domein model kan gebruik maken van alle OO aspecten en design patterns om het functionele gedrag te realiseren, c.q. aanpasbaar te maken
  8. Zie Applying Domain Driven Design & Patterns (Nillson). Ontwerp vanuit het OO-domein en niet vanuit het data model Modelleer je domein model als UML class diagram in het FO om de relaties en business rules in vast te leggen Denk goed na over welke entiteiten een root aggregrates representeren, oftewel, welke entiteiten zijn zelfstandig en tevens ‘parent’ van andere entiteiten. Deze bepalen de locatie van de belangrijkste business rules, versienummering en repository scope Een puur domein model heeft geen kennis van repositories, maar is vaak lastig in gebruik. In Active Record heeft elke entiteit toegang tot een repository en verloopt alle interactie vanuit een BA via de entity. In hybride is ook mogelijk: root aggregrates worden via repository opgehaald, maar entities mogen zelf ook gebruik maken van repositories (via een interface) Gebruik het VAB voor het vastleggen van business rules en constraints De aggregraties bepalen in grote mate ook het cascading gedrag Probeer unittesten te schrijven voor alle business rules waarbij repositoriesgemocked worden. De unittest op BA niveau testen puur de interactie.
  9. Zie Applying Domain Driven Design & Patterns (Nillson). Ontwerp vanuit het OO-domein en niet vanuit het data model Modelleer je domein model als UML class diagram in het FO om de relaties en business rules in vast te leggen Denk goed na over welke entiteiten een root aggregrates representeren, oftewel, welke entiteiten zijn zelfstandig en tevens ‘parent’ van andere entiteiten. Deze bepalen de locatie van de belangrijkste business rules, versienummering en repository scope Een puur domein model heeft geen kennis van repositories, maar is vaak lastig in gebruik. In Active Record heeft elke entiteit toegang tot een repository en verloopt alle interactie vanuit een BA via de entity. In hybride is ook mogelijk: root aggregrates worden via repository opgehaald, maar entities mogen zelf ook gebruik maken van repositories (via een interface) Gebruik het VAB voor het vastleggen van business rules en constraints De aggregraties bepalen in grote mate ook het cascading gedrag Probeer unittesten te schrijven voor alle business rules waarbij repositoriesgemocked worden. De unittest op BA niveau testen puur de interactie.
  10. BPA’s implementeren de functionaliteit van een service in een 1-op-1 verhouding. BPA’s bepalen de unit-of-work en alles daar binnen wordt in een enkele transactie uitgevoerd. Vaak zijn ze ook de scope van de unit tests (ze testen maximaal een enkele business process). In principe moeten ook de business entities (zie de sheets verderop) geunittest worden en dan kunnen de BPA testen beperkt worden tot b.v.een integratietest. BPA’s gebruiken PrincipalPermission attributen of de Role.IsInRole methode om toegang te controleren. Dit verloopt b.v. via een RoleMembershipProvider.Request en response berichten komen rechtstreeks uit de service interfaces. Dit wijkt af van de standaard architectuur, en introduceert een koppeling tussen BusinessLogic project en de MessageContracts en DataContracts projecten. Maar zou je dit niet doen, dan moet je een additionele vorm van conversie tussen die lagen introduceren. De BPA converteert tussen DTOs en entiteiten m.b.v. Translator classes
  11. Gedistribueerde transacties brengen de schaalbaarheid omlaag en introduceren niet te beïnvloeden koppelingen tussen systemen. De BA moet zorgen dat de inkomende berichten gevalideerd worden zodat gebruikers nooit met ‘interne fouten’ geconfronteerd worden. Overigens mag dit gedelegeerd worden naar het domein model. De data die via DTOs binnenkomt wordt vaak doorgegeven aan een entiteit. Validatie gebeurt dus in principe al in de entiteit. In principe logging bij entry en bij exit. Het niveau (Info v.s. Verbose) is afhankelijk van hoe kritisch de service is. Een BA moet alleen business rules tussen entiteiten controleren. Alle andere logica behoort in het domein model.
  12. Repositories regelen toegang tot de database (vaak via een ORM) en gedragen zich als een object collectie (interface is gebaseerd op die van ICollection).Repositories worden altijd via een interface opgehaald (b.v. via een factory)De scope van de unit-of-work wordt door de BA bepaald en niet door de repositories Idealiter ondersteunt de repository eigenschappen van TransparentPersistency, b.v. lazylaoding van relaties tussen entiteiten en het automatisch flushen van alle wijzigingen binnen een unit-of-work. Verzorgt optimalisaties om de database te ontlasten, zoals b.v. first en second-levelcaches, query caching, e.t.c Zorgt dat technische database-specifieke fouten afgeschermd worden en vervangen door functionele fouten
  13. De meeste ORMs ondersteunen alle gewenste functionaliteit. Ik gebruik Nhibernate en Nhibernate.LINQ Definieer 1 repository voor elke aggregatie root Laat toegang tot repositories altijd verlopen via een interface zodat de repository altijd gemocked kan worden Implementeer Iqueryable (b.v. Nhibernate.LINQ) zodat de aanroepende code LINQ queries kan uitvoeren zonder dat dit performanceproblemen veroorzaken. Gebruik Query Object pattern of Specification om een enorme lijst van FindXXX methodes met verschillende argumenten te voorkomen.
  14. Een service agent zit tussen het domein model of BA en een extern systeem (of subsysteem) en schermt alle technische afhankelijkheden af. Doel? De impact van externe wijzigingen minimaliseren. Ook kan een SA de verschillen tussen interne en externe accounts transparant maken (mapping tussen accounts) zodat single sing-on mogelijk is. Biedt optimalisatie aan zoals caching, retries, auditing, logging, e.t.c. Verzorgt de monitoring en tracing van de interactie met de externe systemen, en kan bijvoorbeeld actief signaleren als bepaalde operaties opvallen lang duren.
  15. Service Agents altijd via interfaces aanroepen om unittesten te kunnen schrijven zonder het externe systeem. Ook toegang tot files of networklocaties en reporting engines zijn ‘extern’ en moeten via service agents verlopen. Aangezien een service agents van nature long-running zijn, moeten die in principe altijd via een WF verlopen. Let op, in de praktijk gebeurt dit niet zo vaak.
  16. Verantwoordelijkheden Op het moment dat een business process langdurig is (meerdere uren, dagen, weken), dan moet dit opgelost worden door een business workflow. Het aanroepen van de bijbehorende service verloopt dan asynchroon.Workflowsorchestreren een logische gedistribueerde transactie over meerdere systemen, maar gebruiken geen echte locking. Transactie’s moeten dus gecompenseerd worden. Ook de communicatie met externe systemen moet in principe via workflows lopen omdat je nooit op externe systemen kunt vertrouwen. Aandachtspunten Tot .NET 3.5 was het erg lastig om de WF runtime te hosten in IIS en te exposen als WCF service, maar met de nieuwe ServiceWorkflowHost is dat beter opgelost. OOTB ondersteunt WF alleen SQL Server, maar er is een CodePlex project met een generieke implementatie voor meerdere databases. In WF is het gebruikelijk om de data die bij de workflow instantie hoort in de workflow op te slaan en zo mee te persisteren in de database. Maar het is beter om een functionele sleutel naar het domein model te gebruiken. Op die manier combineer je state en bedrijfslogica op de juiste manier en voorkom je workflow problemen als het domein model wijzigt.
  17. Autonoom = niet afhankelijk van elkaar Geen gedistribueerde transactie’s, dus geen onnodige locking en dus vertragingen over meerdere databases of systemen Logica in .NET = .NET code in een applicatieserver is schaalbaarder dan een stored procedure in een databaseLoadtestso.b.v. VSTS Load Test of Team Test Load Agent
  18. Ontkoppeld Service Agents om de buitenwereld af te schermen Web services om platformonafhankelijk te zijn Overleg interfaces om zo weinig mogelijk te moeten aanpassen (TDD helpt hier heel goed)
  19. * FxCop en StyleCop hebben in principe niet direct iets met betrouwbaarheid te maken maar zorgen wel voor hoge codekwaliteit en dus minder kans op bugs
  20. Ilities =maintainability, extensibility, testability Geen technische afhankelijkheid vanwege gebruik van ORM