Upgrade to Pro — share decks privately, control downloads, hide ads and more …

イベントストーミングによるオブジェクトモデリング・オブジェクト指向プログラミングの適用・開発プロセスの変遷・アーキテクチャの変革 / Object modeling with Event Storming.

nrs
March 23, 2024

イベントストーミングによるオブジェクトモデリング・オブジェクト指向プログラミングの適用・開発プロセスの変遷・アーキテクチャの変革 / Object modeling with Event Storming.

Object Oriented Conference 2024 にてお話ししました

【アブストラクト】
本トークでは、イベントストーミングを活用したオブジェクトモデリングの実践が開発プロセスとアーキテクチャにどのような変革をもたらしたかについて詳しくお話しします。

「どのようなオブジェクトを実装するのか」
この単純な問いに私たち開発者は多くの悩みを抱えています。

イベントストーミングの結果として得られるモデルはこの問いに対する解答の示唆に富んでいます。
その有用性を認め、私たちは過去2年間、組織的にイベントストーミングに取り組んでまいりました。

もちろん、ただイベントストーミングを採用すれば、それですべて片付くといったものではありませんでした。

イベントストーミングの採用は開発プロセスを一変させました。
アーキテクチャの選定基準を変えました。
組織的に取り組むには多大な努力と適応が求められました。

本トークでは実地での経験を基に、イベントストーミングによるモデリングの採用がどのようにプロセスやアーキテクチャの選択肢に影響を及ぼしたのかについて共有します。

アブストラクトURL:https://fortee.jp/oocon-2024/proposal/60ee3bfa-46ff-4de8-9140-1a44103f3d28

# URL
YouTube: https://www.youtube.com/c/narusemi
HomePage: https://nrslib.com
Twitter: https://twitter.com/nrslib

nrs

March 23, 2024
Tweet

More Decks by nrs

Other Decks in Programming

Transcript

  1. public class OrderPlaced { private String orderId; private LocalDateTime orderDate;

    // ... public OrderPlaced(String orderId, LocalDateTime orderDate) { this.orderId = orderId; this.orderDate = orderDate; // ... } }
  2. public class Order { // ... public void placeOrder(String orderId,

    LocalDateTime orderDate) { // オーダーを発行する処理 // ... events.add(new OrderPlaced(orderId, orderDate)); } }
  3. public class Order { private String orderId; private List<OrderLine> orderLines;

    // ... public void placeOrder(String orderId, LocalDateTime orderDate) { // オーダーを発行する処理 // ... events.add(new OrderPlaced(orderId, orderDate)); } public void addOrderLine(Product product, int quantity) { // オーダーラインを追加する処理 // 不変条件のチェックなど // ... } }
  4. public record DocCreated( DocId docId, String body ) implements DocEvent

    { } public record Doc( DocId docId, String body ) implements EventDrivenAggregateRoot<DocEvent> { ... } public record DocCreate(DocId docId, String body) implements DocCommand { }