4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ZOZOAdvent Calendar 2022

Day 4

集約を小さく保つ手法

Last updated at Posted at 2022-12-03

はじめに

この記事はZOZO アドベントカレンダー2022#5 4日目の記事になります。

今回はドメイン駆動設計における集約に関する問題を考察してみます。

問題

システムの稼働が長くなればなるほど、新しい機能やサービスによって集約が大きくなっていって、いつのまにか保守性が下がるという問題があります。

いかに集約を小さくするかという問題を考えてみます。

作戦1 コマンドとクエリでモデルを分ける。

そもそもコマンド(更新や削除)とクエリ(検索)では、基本的な要件が異なるので、思い切ってモデルを分けるという考えになります。

アーキテクチャ的には多少複雑になりますが、クエリに必要なパラメータとか、レスポンスの値とかをコマンド側では考えなくて良くなり、コマンド用のモデルはシンプルになります。

一方のクエリは検索して結果を返すだけなことが多いので、そもそもしっかりモデルを考える必要がないこともあります。

image.png

作戦2 集約をコンテキスト境界や担当業務ごとに分ける

コンテキストを意識して分けるやり方です。コンテキスト境界を意識して分けていく感じです。

木目モ.jpg

いわゆるマイクロサービスの概念です。今回は詳細まで記載しませんが、アーキテクチャの実装については、モノリスのままモジュラーモノリスの形態を取るか、きっちりマイクロサービスのアーキテクチャを取り入れるか、いずれにしてもサービス間、コンテキスト間のやり取りをどうするかというところが難しいところですね。

まとめ

集約を小さく保つ、つまりコードをシンプルに保とうとすれば、するほどアーキテクチャは複雑になる傾向にあります。
もちろん集約内のドメインをいかに保守性高く保つかにも気を配らなければ元も子もないですよね。

アプリケーションの公開当初はシンプルであったとしても時間の経過につれて複雑になっていくものなので、いつどのようにアーキテクチャを変更するか、または最初から見越してやっておくかというのも決断が難しいところです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?