Domain Driven Design and Event Sourcing with RIM.

Post on 27-Mar-2015

218 views 0 download

Tags:

transcript

Domain Driven Design and Event Sourcing with RIM

Introduction

2

RIMResistance is Futile, you Will be Assimilated!

DDD and Event Sourcing

3

• Introduction– George de la Torre

• Developer of custom clinical apps• For a long time• Discovered RIM a long time ago…

– Oleg Sitalo (silent partner)• Developer of custom clinical apps• For a long time together• Believes in RIM, at occasions…

DDD and Event Sourcing

4

• Agenda– Google will find heaps of stuff on this– Will focus on the RIM stuff– Great resources for DDD/ES

• http://msdn.microsoft.com/en-us/library/jj554200.aspx• Implementing Doman-Driven Design

– Vaughn Vernon

• Domain Driven Design (the Blue Book)– Eric Evans

DDD and Event Sourcing

5

• Domain Driven Design– Object Oriented Model – Business needs & language captured – HL7 v3 RIM benefits

• Design done! – the hardest part• Standard – open & shared to all• Deep insights into domain knowledge• Integration of domains built in (No

barriers!)• Reuse logic across clinical domains

Domain ModelBlueprint for all Aggregates

6

HL7 V3 RIM

7

Vocabulary

Supporting DomainsExternal Services

Bou

nd

ed

Con

texts

Bou

nd

ed

Con

texts

8

Supporting DomainsExternal Services

Other systems or Big Ball of Mud…

Anti Corruption LayerAnti Corruption Layer

Business Process and Rules Engines

Point: This layer keeps RIM pure!

DDD and Event Sourcing

9

• Event Sourcing – Only the Aggregate (D-MIM) is

persisted– The command is saved (Behavior)– Aggregates publishes the events– Command Query Responsibility

Segregation (CQRS) • Command (Transaction) Model• Query Model

Patient Dashboard ExampleUse Case

10

• Schedule a patient visit – Find Patient (Query Model)– View Calendar (Query Model)– Patient assigned time slot (Command)– CreateAppointmentCommand(data)

executes• Scheduling aggregate is created from data• The created aggregate is appended• Publishes event to update Query Model

11

Scheduling AggregateExample

12

Scheduling AggregateCMET (PAT) is the Root

13

Scheduling Aggregate

• Considerations– Entity is usually the Root– No cloning, only class codes – Aggregates varies with the RIM set– Act may be the Root (Strategy)

• Reference others Aggregates (Observations)• Act Mood partitioning• PHI segregation requirement (Query model

too)• Performance

14

Scheduling Aggregate

• Considerations continued…– Serialized, XML, JSON, etc…– Relational Database (SQL)– Cache based systems– File systems– NoSQL

• Natural for event stores• Easier to query Aggregates if needed• Aggregates loaded for logic on command

15

Scheduling AggregateAppended

ID Name Version Data

1 Schedule

1.2

2 Schedule

1.2

3 Schedule

1.2

CreateAppointmentCommand(data)

Event Store

16

Scheduling AggregatePublishes Events

AppointmentCreatedEvent(data) {

MRN First Last DOB Phone Start End Note

UpdateDatabaseView()

}

Query model

17

Scheduling AggregatePublishes Events

AppointmentCreatedEvent() {

CreateAdmissionMessage()

}

HL7 2.xMSH|^~\&|ADT1|MCM|LABADT|MCM|198808181126|SECURITY|ADT^A01|MSG00001-|P|2.3EVN|A01|198808181123PID|||PATID1234^5^M11||JONES^WILLIAM^A^III||19610615|M-||C|1200 N ELMSTREET^^GREENSBORO^NC^27401-1020|GL|(91-9)379-1212|(919)271-3434||S||PATID12345001^2^M10|123456789|9-87654^NC

Scheduling AggregatePublishes Events

AppointmentCreatedEvent() {

UpdateDataMart()

}

Patient Dashboard ExampleTwo Separate Models

(CQRS)

19

• Domain (Transaction) Model– Complex structure (RIM)– Aggregates are only created from RIM– Aggregates are appended (Write Only)

• Query Model– Simplified model structure (SQL)– Multiple models created as needed– Model optimized for querying (Read

Only)

Simple Component DesignCQRS

20

WebDashboard

WebDashboard

View ModelView ModelAggregate Services

Aggregate Services

App Services

App Services

Publishes to

Commands

Query

EventsEvents SQLSQL