Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)



Relaterede dokumenter
Object-Relational Mapping

Eksempel: et ordresystem note 5 Lagdeling s. 1

A Profile for Safety Critical Java

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Database for udviklere. Jan Lund Madsen PBS10107

Abstrakte datatyper C#-version

Software Projekt NoSQL vs RMDB

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Skriftlig eksamen i Datalogi

IT-Basecamp Real World Java EE Patterns Adam Bien. Real World Java EE Patterns, Adam Bien Copyright Lund&Bendsen A/S

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Indhold. Senest opdateret : 30. juli Side 1 af 5

Tredjepart webservices

Assignment #5 Toolbox Contract

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Objektorienteret design med arv og polymorfi:

Indhold. Senest opdateret:03. september Side 1 af 8

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling

Dygtig.NET / C# udvikler med stor erfaring fra både offentlige organisationer og private virksomheder.

Model Drevet Design i Praksis

Introduktion til ActionScript

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Introduktion til ActionScript, fortsat

Plugin-arkitektur med.net

SWC Elementer i klassedefinition

Sammenligning af Objekt-orienteret databaser og Relationelle databaser.

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

Videregående programmering i Java

OIOSAML.NET og Umbraco. ved Thomas Ravnholt silverbullet.dk

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Objects First with Java A Practical Introduction Using BlueJ

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni jun 2011 MapBasic &.

Forelæsning Uge 1 Torsdag

Databaseadgang fra Java

Skriftlig eksamen i Datalogi

Web- og serverprogrammering

SWC eksamens-spørgsmål. Oversigt

Hvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag

1 Domæne Design valg User Klassediagran 5

SYSTEMDOKUMENTATION AF POC

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

ADIS, WS og Meta Service

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Forelæsning Uge 1 Torsdag

Fra idé til virkelig med Azure Mobile Services

Objektorienteret Programmering

Sporbarhed og Rapportering i Quality Center. Kim Stenbo Nielsen NNIT Application Management Services

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

FLIS PORTAL GENNEMGANG OG STIKPRØVER (SEPTEMBER 2015)

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Indholdsfortegnelse. Systembeskrivelse kapitel 3 Forretningslogik

Undervisningsplan. Side 1 af 9. Termin Rybners Tekniske Gymnasium. Uddannelse. Fag og niveau. Informationsteknologi B

Spring Schema Extension eller Spring Domain Specific Languages

DSB s egen rejse med ny DSB App. Rubathas Thirumathyam Principal Architect Mobile

Database kursus Forår 2013

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

System & Metode ApS præsenterer. En effektiv dokumentportal

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Modern Concurrency Abstractions for C#

Der er forsøgt skrevet en lille notits hver gang der er lavet noget, dog kan der være nogle ting som ikke er blevet kommenteret.

DM507 Algoritmer og datastrukturer

Tabeller (I) Tabeller

3D matriklen i et fremtidsperspektiv

Software Construction 1 semester (SWC) Spørgsmål 1

Serialization i Java

Forelæsning Uge 2 Mandag

NemID DataHub adgang. & Doc , sag 10/3365

Programmering og Problemløsning, 2017

DANSK IT ARKITEKTUR CERTIFICERING

Kursusarbejde 3 Grundlæggende Programmering

Udvikling af DOTNET applikationer til MicroStation i C#

DM507 Algoritmer og datastrukturer

CLR Integration. Af Torsten Holtse, pbs Indhold

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Eksempel: Skat i år 2000

DOtAB. Teknisk rapport

Product Ownerens værktøjskasse

System Arkitekt Practitioner

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Datatekniker med programmering som speciale

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

ENTERPRISE ARCHITECTURE (EA) STRATEGY, BUSINESS AND IT ALIGNMENT

Introduktion til Microsoft R. Steen Dybboe, Pragmatic BI MsBIP 2017 Aarhus

Ribe Amts forslag til EPJ-arkitektur

Forelæsning Uge 3 Torsdag

educasoft - en professionel samarbejdspartner med speciale i uddannelse!

APEX i Praksis Martin B. Nielsen. Navn. MBNDATA Emne

Agenda. Kort præsentation Introduktion til Robotic Process Automation (RPA) Demo Hvordan understøtter det forretningen? Hvordan kommer man i gang?

Hovedopgave Master i Informationsteknologi linien i Softwarekonstruktiona

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Introduction til.net remoting i C#

Test af It-komponent

Educasoft 2010 Side 1. Søgemaskineoptimering

Transkript:

Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net) Kim Harding Christensen EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787 http://www.eos.dk

Abstract Ifølge Martin Fowler [PoEAA] er der to hovedmønstre til at strukturere typiske enterprise applikationer; Transaction Script og Domain Model. Dette indlæg giver en introduktion til hvad en domænemodel er, hvilke fordele der kan være ved at basere sin arkitektur på en domænemodel, samt praktiske design mønstre, der hjælper til at strukturere domænemodellen. Der vil blive vist C# kode (Whidbey), som illustrerer implementationen af de enkelte design mønstre. Vi vil også diskutere hvordan service orientering og domænemodeller hænger sammen. EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (2)

Formål Formålet er at give en introduktion til området og forhåbentligt gøre jer interesseret i at finde mere information om emnet. Det at være domænemodel fikseret er i høj grad en mental tilstand, som for mange kræver en del tilvænning. Formålet er IKKE at I skal standse al igangværende udvikling og skifte hest. EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (3)

Agenda Introduktion til domænemodeller Modellering (i farve) Lidt om udviklingsproces Patterns til strukturering af domænemodeller C# eksempler på implementering SO(A) og Domænemodeller EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (4)

Introduktion til domænemodeller EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (5)

Kontekst Præsentation Rig klient (Windows), Web, kommandolinie Visning af data, håndtere brugerinput Domænelogik Forretningslogik Data-adgang Adgang til RDBMS, beskedsystem, ERP, EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (6)

Domænelogik Præsentation Domænelogik Data-adgang To hovedretninger: Transaction Script (procedural) Domain Model (objektorienteret) EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (7)

Transaction Script Organiserer forretningslogik i form af procedurer, hvor hver procedure håndterer et enkelt request fra præsentationen Et Transaction Script kalder databasen direkte eller gennem en tynd databasewrapper EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (8)

Transaction Script fordele/ulemper Fordele Alle kan lære at bruge transaction script Simpel at implementere Minimal performance overhead Ulemper Resulterer let i Cut & Paste programmering Svær at vedligeholde Samme fejl propagerer rundt i kodebasen og skal rettes mange steder Skalerer ikke til komplicerede opgaver EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (9)

Domain Model Organiserer domænelogikken i form at et sæt objekter, der arbejder sammen for at løse forretningsoperationer & forretningsregler De begreber, der findes i problemområdet, findes som klasser i domænemodellen Indbegrebet af Objektorientering EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (10)

Transaction Script / Domain Model Transaction Script Domain Model EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (11)

Modellering EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (12)

Eksempel 1 shipmentaddress Catalog Distributor ContactInformation * Customer * 1 1 ProductCategory 0..1 0..1 * CustomerSale 1 CustomerShipment 1 ProductLine * 1 Brand 0..* 0..* 1 * Order Shipment 1 0..1 1..* 1 * * Product ProductSale OrderLineItem ShipmentLineItem EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (13)

Order-management Customer 1 0..* Order 1..* Product 1 * OrderLineItem EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (14)

Lidt om udviklingsproces EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (15)

Feature-Driven Development Opstart Iteration Iteration Udvikle domæne model Lav feature liste Planlæg iterationer baseret på feature liste Design feature Implementer feature Design package Bruger nyttig funktion Feature: <aktion> <resultat> <objekt> Beregn total-ordre-sum for en kunde EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (16)

Patterns til strukturering af domænemodeller EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (17)

Domain-Driven Design (DDD) Der er mange måder at realisere en domænemodel på DDD beskriver et sæt patterns Entity ValueObject Repository Specification EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (18)

Entity Objekt, som er entydigt identificeret ved et ID Sammenlignes ikke ved at sammenligne værdierne af objekternes attributter Har som regel lang levetid Eksempler: Product Customer Order EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (19)

ValueObject ValueObject er har ikke et entydigt ID Sammenlignes vha. objekternes attributter Beskriver entiteter Bør være immutable Eksempel: OrderLine EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (20)

Entity & ValueObject <<Entity>> Customer 1 0..* <<Entity>> Order 1 1..* <<Entity>> Product 1 * <<ValueObject>> OrderLineItem EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (21)

Specification Udtrykker en forretningsregel (som et objekt) Typer af anvendelser Query Validering interface ISpecification <T> { bool IsSatisfiedBy(T domainobject); class GoldCustomerSpecification : ISpecification<Customer> { public bool IsSatisfiedBy(Customer acustomer) { return acustomer.totalorderamount > 10000? true : false; EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (22)

Repository Repository sørger for at hente/gemme Entities & ValueObjects fra databasen. Repository interfacet minder om Collection Giver illusionen af at alle objekter er i RAM Skjuler al database-kode fra klienten Eksempler: CustomerRepository OrderRepository EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (23)

Repository eksempel CustomerRepository <<Entity>> Customer 1 0..* ProductRepository <<Entity>> Order 1 OrderRepository 1..* <<Entity>> Product 1 * <<ValueObject>> OrderLineItem EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (24)

En note om Persistens Problemet med domænemodeller er mapningen til RDBMS Overvej at bruge et ORM værktøj NHibernate er Open Source (Beta!) PoEAA indeholder relevante patterns, hvis man selv vil skrive mapningen EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (25)

Eksempler på implementation EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (26)

OrderLineItem = ValueObject = POCO class OrderLineItem { int quantity; Product product; float price; public OrderLineItem(Product product, int quantity, float price){ this.product = product; this.quantity = quantity; this.price = price; public int Quantity { get { return quantity; public Product Product { get { return product; public float Price { get {return price; EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (27)

Order = Entity = POCO class Order { Customer customer; List<OrderLineItem> lineitems; public Order(Customer customer) { this.customer = customer; lineitems = new List<OrderLineItems>(); public void AddLineItem(OrderLineItem li) { lineitems.add(li); public void RemoveLineItem(OrderLineItem li) {lineitems.remove(li); public IList<OrderLineItem> LineItems { get {return lineitems; public float TotalPrice { get { float result = 0; foreach (OrderLineItem li in lineitems) { result += li.price; return result; EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (28)

Repository public interface IRepository<T> { void Add(T newelement); void Remove(T element); void Remove(int oid); T FindByOID(int oid); IList<T> Select(ISpecification<T> spec); public class AbstractRepository: IRepository<T> { public class CustomerRepository: AbstractRepository<Customer> { public class OrderRepository : AbstractRepository<Order> { public class ProductRepository : AbstractRepository<Product> { EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (29)

Specification interface ISpecification <T> { bool IsSatisfiedBy(T domainobject); class GoldCustomerSpecification : ISpecification<Customer> { public bool IsSatisfiedBy(Customer acustomer) { return acustomer.totalorderamount > 10000? true : false; public interface IRepository<T> { void Add(T newelement); void Remove(T element); void Remove(int oid); T FindByOID(int oid); IList<T> Select(ISpecification<T> spec); EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (30)

Specification interface ISpecification <T> { bool IsSatisfiedBy(T domainobject); bool SupportsDbQuery { get; string QueryString { get; abstract class Specification<T> : ISpecification<T> { string querystring; Specification(string querystring) {this.querystring = querystring; abstract bool IsSatisfiedBy(T domainobject); string QueryString { get {return querystring; bool SupportsDbQuery { get {return querystring==null? false : true class GoldCustomerSpecification : Specification<Customer> { GoldCustomerSpecification() : base( ) { public override bool IsSatisfiedBy(Customer acustomer) { return acustomer.totalorderamount > 10000? True : false; EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (31)

Typisk brug // Opret ny ordre Order neworder = new Order(); neworder.addlineitem(new OrderLineItem(aProduct, 5, 500.00)); OrderRepository orderrepository = new OrderRespository(); orderrepository.add(neworder); // Find alle guldkunder CustomerRespository customerrepository = new CustomerRepository(); IList<Customer> goldcustomers = customerrepository.select(new GoldCustomerSpecification()); // Check om en given kunde er en guldkunde Customer mycustomer = ; if (new GoldCustomerSpecification().IsSatisfiedBy(myCustomer)) { EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (32)

SO(A) og domænemodeller EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (33)

Kontekst Servicelag Domænemodel Data-adgang EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (34)

Teknologi neutral ~ Teknologi specifik Service TechnologyServices ProductWebService ProductMQService SalesWebService SalesRemotingService DomainServices ProductService SalesService DomainModel CustomerRepository <<Entity>> Customer 1 0..* ProductRepository <<Entity>> Order 1 OrderRepository 1..* <<Entity>> Product 1 * <<ValueObject>> OrderLineItem EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (35)

Domænemodel fordele/ulemper Fordele God til at håndtere komplekse problemområder Skalerer til meget store kodebaser Fælles sprog mellem udviklere og domæne-eksperter Behersker man først domænemodeller, laver man sjælden løsninger baseret på andre strategier Ulemper Tidskrævende at mappe mellem den objektorienteredemodel og det relationellemodel, hvis man ikke har de rigtige værktøjer (f.eks. ORM) Høj indlæringskurve - kræver disciplineret tilgang EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (36)

Referencer Patterns of Enterprise Application Architecture Martin Fowler Addison-Wesley ISBN 0-321-12742-0 Domain-Driven Design Eric Evans Addison-Wesley ISBN 0-321-12521-5 Feature-Driven Development Stephen R. Palmer & John Felsing Prentice Hall ISBN 0-13-067615-2 Java Modeling in Color with UML Peter Coad et.al. Prentice Hall ISBN 0-13-011510-x www.patternshare.org EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (37)

Kontaktinformation Kim Harding Christensen khc@eos.dk EOS A/S Margrethepladsen 3 8000 Århus TLF: 8732 8787 http://www.eos.dk JAOO 2005 25. 30. September Århus http://www.jaoo.dk EOS A/S Margrethepladsen 3 8000 Århus 8732 8787 http://www.eos.dk (38)