1
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.

DDD(ドメイン駆動設計)の勉強&実践記録(一)

Last updated at Posted at 2021-10-05

このシリーズを作成する背景について

 自分がアーキテクチャーに興味を持つ、社内でDDD(ドメイン駆動設計)という単語を聞きましたので、調べていくとますますいい設計だと思い、自分なりの理解を記事にしたく、このシリーズを書くことにしました。
 あくまで個人の理解で、間違う部分もあると思いますが、勉強したことを忘れないように記録していきたいと考えています。

このシリーズの内容について

 ・DDD(ドメイン駆動設計)に関連する概念の説明
 ・実際DDD(ドメイン駆動設計)を使用し、サンプル用のシステムを開発していく
 ・仕様変更&機能追加する際、DDD(ドメイン駆動設計)の優位性を説明
 ・サンプルシステムを開発した際のソース 
    ※GitHubにアップロードする予定

では早速本題に入りたいと思います。

大規模システム移行における課題

・システム品質悪い、保守コスト膨大

  企業の業務が大きくなればなるほど、仕様変更と機能追加が行われ、その際にスピードかつ低コストで要件が実現させたいですが、アーキテクチャーと各クラスの依存関係を考えずに実装されているため、各クラスが密結合になり、小さな仕様変更でも、修正するクラスが多くなります。さらに関連ドキュメントも古くなり、保守に膨大がコストが必要。
  ※最悪全システムをリファクタリングすることになる

・発生する根本原因&自分の所感

  企業が成長するために事業拡大は必然で、初回システムを開発する際は品質はいいものの、仕様変更と機能追加すればするほど品質落ちてしまいます。お客様の要望で開発しているシステムは我々システムエンジニア(SE)としては一つのプロジェクトかもしれませんが、お客様にとっては企業を支えるプロダクトです。
  なので、プロダクトとして、開発しているシステムの未来性を見込み、今後のためにいかに低コストかつ高品質でシステム再構築するか、IT技術を持つSEが責任をもって提案するべきだと考えています。
  そして、DDD(ドメイン駆動設計)がそれを解決するための道しるべとして挙げられます。

DDD(ドメイン駆動設計)の概要

・DDDとは?

 概要: システムを設計する際の設計手法
 良い点: 
   ・開発時:業務分析したうえでモデリング手法(UML)で可視化することで、要件定義の際にお客様と合意を取りやすくなる、また、それをベースに詳細設計を行うことで、開発者に対してもシステムを理解したうえでの開発が可能で、品質が高くなる。
   ・システム改修時:既存モデルを更新し、業務を実現する際に低コストかつ高品質で改修できる。

・DDDを実践する際の流れ

  ⓪**(システム改修時のみ)既存システムのモデル資料を受領
  ①顧客の要件定義を聞き出す。
  ②ドメインモデリング(ドメイン、サブドメイン、コンテキストを設計)
   ※顧客と要件を用意するために、①②を繰り返す
  ③マイクロサービス設計(単一責任原則)
  ④ドメインモデルによるシステムモデリング(オブジェクト指向OOA/D、デザインパターン)
  ⑤ドメインモデルによるデータベースモデリング(エンティティ、値オブジェクト、集約を考慮)
  ⑥システムアーキテクチャー設計
   ※
(システム規模が大きい場合)**Middle Platform(中国語では「中台」)を考慮する 
  ⑦各モデルをもとに開発を行う
  ⑧CI/CDによるビルド、テスト、デプロイを自動化

・DDDが求められる能力

  ・業務モデリング(単一責任の原則を準拠、かつ現実視点で客観的に業務を分析して分割)
  ・オブジェクト指向(設計時には開放/閉鎖原則を準拠)
  ・デザインパターン(Decorator パターン、Factory Method パターン)
    ※貧血モデル と 充血モデルを考慮して設計
    日本語でどう言うか分からないため、まずこのように翻訳します。
  ・システム設計(クラス図、ユースケース図、シーケンス図などのUMLの設計)
  ・データベースモデリング(NoSQLが推奨される)
  ・マイクロサービス(Spring cloudなど)
  ・システム(docker、k8s)、データベース(負荷分散)の高信頼・高性能設計
  ・アジャイル開発
  ・クラウド技術(AWS)
  ・CI/CD技術

・まとめ

  以上、自分の理解でドメイン駆動設計についての概要、実践する際の流れと必要な能力をまとめました。

 

1
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
1
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?