왜 DDD 초보자는 굉장히 나오자마자 마음이 굳어져 버리는지

DDD 연재 기사
* 왜 DDD 초보자는 구그리 나오자마자 마음이 굳어져 버리는지
* 도메인 중심 설계의 정의에 대해 Eric Evans는 무엇을 말하고 있습니까?
* 모델에서 도메인 지식을 표현하는 것은 무엇입니까?
* 도메인 기반 설계로 구현을 시작하는 데 가장 가까워지는 아키텍처는 무엇입니까?
* 도메인 기반 + 양파 아키텍처 개요

배경



최근의 프로젝트에서 DDD의 사상에 근거한 아키텍처로 하나 릴리스까지 젓고, 거기에 이르기까지 여러가지 조사하거나 시행착오를 하면서 배운 것을 써 가려고 생각합니다.

가장 중요합니다. 대부분의 DDD에 관심이있는 사람들이 말하는 것이
「単語が難しいばかりで結局イメージが湧かない」

「ドメイン駆動の本を読もうとして速攻で心が折れた」


그렇습니다.

DDD는 사상으로서 몹시 재미있고, 매우 실용성인 것인데, 어째서 이렇게 이해하기 어려운지, 허들이 높은 것인가! !

라는 점에 대해 나 나름의 해석을 말하고 싶습니다.

마음을 깎는 요인



Eric Evans 책은 설명이 압도적으로 서투른. 웃음



도메인 구동 설계라고 하면 원저가 이 책(이하, 원전)입니다만,

에릭 에반스의 도메인 중심 설계 이 책은 진짜 ~~~ 이해하기 어렵습니다. 중요한 것은 확실히 쓰고 있습니다만, 구성이 상당히 힘들고 정리가 없는 것입니다. 대충 실장하고 나서도 결국 이 결론이 되기 때문에, 그 책에서 모르는 것은 어쩔 수 없습니다. 웃음 우선 서적은 실천 DDD(이하 IDDD)에서 들어가는 것이 좋다고 생각합니다. 실습 도메인 구동 설계

ここである程度イメージをもたせてから、興味があったら原点に当たるというのが良いでしょう。

DDD는 대상 영역이 넓지만, 그것이 이해되지 않고 각각 국소적인 설명이 되어 있는 경우가 많다

DDDの領域は大きく分けて3つに分けられます。

  • 開発思想:
    • システムの複雑性に取り組むために、業務の専門家と技術の専門家で言語・モデルの認識を合わせ、継続的に進化させていこう、という考え方
  • 戦略的設計:
    • ドメインモデリングの前提を揃えるための、モデリング対象を定義する原則と手法(コアドメイン/サブドメイン、境界付けられたコンテキスト、コンテキストマップ等)
  • 戦術的設計
    • モデルを具体的に表現するためのパターン(エンティティ、レポジトリ、レイヤードアーキテクチャ等)

この全体像が整理されないまま、メリットやHowの話になってしまうと、全体像が見えないので何の話をしているのか混乱してしまうのです。

強引に例を挙げるならスクラムの見積もり手法とGoFデザインパターンのいくつかを並べて同時に「開発の効率化とは」と論じるようなものです。それぞれに目的があり、関係性があり、それが繋がって本当にやりたいことができるわけです。

아키텍처 이야기의 가중치가 가볍다.

戦術設計の話で、レイヤー化アーキテクチャについては 「ドメイン層を設けてドメインロジックはそこに閉じ込めましょう」ぐらいで終わっていきなりエンティティやレポジトリパターンの話になってしまう。

これも罠だと思っています。なぜなら、

DDD戦術的設計の最大のメリット、同時に一番頭をひねるところはとにかくアーキテクチャにある

と言っても過言ではないと思うからです。

まず、DDDの推奨するアーキテクチャを採用することによっていかにメリットがあるか。ここについてきちんと時間を割き、その後のモチベーションを高めることがまずは重要だと思っています。エンティティ、レポジトリというパターンは、あくまでレイヤーを綺麗に分ける上でのHowでしかないのです。ここのウェイトの認識を間違えないようにすることが重要です。

しかし!ここからはより具体的な問題が出てきます。。

아키텍처의 모범이 하나로 통합되지 않음

実は、原典でお手本とされているレイヤー化アーキテクチャと、IDDDでお手本とされているアーキテクチャが違うのです。

これは、IDDDでは原典から10年のときを経て洗練されたアーキテクチャになっているということなのですが、これはつまりエンティティなどのデザインパターンは原典でかなり完成されていたのに対して、レイヤー化アーキテクチャに関しては実はある意味未成熟なものであったということ。

そしてそれによりネット上の文献で紹介されるアーキテクチャが様々なものとなっているのです。IDDDではヘキサゴナルアーキテクチャというものが掲げられていましたが、それを進化させたオニオンアーキテクチャ、クリーンアーキテクチャなどの有名な亜種が存在します。また日本の著名なDDD推進されている方のスライドを見ると、ヘキサゴナルとは思想の異なるアーキテクチャを提案しています。

これが実装に着手する際に非常に大きな混乱を呼ぶのです。文脈の理解、採用するアーキテクチャの選定に時間を取られることでしょう。

앞으로의 이야기

以上、ひとまず導入して思うところをつらつらと書かせていただきました。

ひとまず上記のような分かりづらさがあるよね、というのを整理した上で、私なりに分かりやすいと思う説明の記事を書いていこうと思います。ご興味ありましたら、どうぞおつきあいくださいませ。

후속 기사

괜찮으면 부디! DDD의 정의에 대해 Eric Evans는 무엇을 말하고 있습니까?
【DDD】모델로 도메인 지식을 표현하는 것은 무엇인가

끝에



Twitter에서도 DDD의 이야기를 중얼거리고 있으므로 좋으면 팔로우해 주세요. 질문 상자에서 익명의 질문도 접수하고 있습니다.
기사에 관한 질문도 부담없이 부디!

트위터 : @little_hand_s
질문 상자

좋은 웹페이지 즐겨찾기