2017-12-15 December learning session

2017-12-15 December learning session

Date

Dec 15, 2017

Attendees

  • @Sebastian Brudziński

  • @Nikodem Graczewski (Unlicensed)

  • @Mateusz Kwiatkowski

  • @Łukasz Lewczyński (Deactivated)

  • @Paweł Albecki (Deactivated)

Goals

  • Watch learning material Domain-Driven Design in Practice
     (https://www.pluralsight.com/courses/domain-driven-design-in-practice) - Extending the Bounded Context with Aggregates, Introducing the Second Bounded Context

  • Discuss watched materials and compare to how things are handled in OpenLMIS - are there any ideas/approaches/workflows we can adopt in OpenLMIS?

Discussion

  • Aggregates:

    • Requisition - root entity

      • line item - entity

        • Line items should not be available outside of Aggregate.

        • Getter should return immutable list of immutable objects or no getter, line items should be updatable through Requisition Aggregate.

        • Setter should be removed.

        • Line item should not have id in DTO.

      • Value Objects - worth having (discussion already on Dev Group)

    • Order

      • POD has Order, Order has line item, POD line item has order line item.

      • Order line item should not be referenced from outer context.

    • Proof of Delivery

      • for every line item values of quantity shipped, quantity received, quantity returned, replaced product code.

      • How to get order line item details on ui? e.g. by orderable code.

  • Bounded Context - follow up from previous learning meeting discussion, solution space

  • Sub-domains - problem space

Wrap up

We have asked every participant to give a score on how useful this meeting was and how helpful this specific material was. The voting was anonymous and each participant could give a score from 1 (useless) to 10 (very useful).
The averages were:

How useful are those meetings:  8/10
How useful was this specific material?

  • Extending the Bounded Context with Aggregates:  8.2/10

  • Introducing the Second Bounded Context:  6.8/10

 

Final thoughts

  • It's worth to consider using AggregateRoot, ValueObject superclass/interface.

  • Getters should return immutable list of immutable objects or should be not implemented.

Action items

@Mateusz Kwiatkowski to start discussion about separate resource for requisition for approval.
@Łukasz Lewczyński (Deactivated) to create ticket for order line item should not be referenced from outer context (POD). → https://openlmis.atlassian.net/browse/OLMIS-3827
@Paweł Albecki (Deactivated) to follow up with requisition line items should not be available outside of Requisition Aggregate.

OpenLMIS: the global initiative for powerful LMIS software