ドメイン駆動設計 実践

#ソフトウェア設計

ドメイン駆動設計 実践 設計から実装へ DDDで学ぶWeb API開発

Javaで学ぶ、ドメイン駆動設計の実践。

Overview

研修概要

ドメイン駆動設計 実践は、ソフトウェア設計の基本原則と設計プロセスを体系的に理解し、ドメイン駆動設計(DDD)を実務で活用できる「設計力」と「実装力」の習得を目標とした実践型研修です。

SOLID原則の理解から要件分析(ロバストネス分析)、各レイヤの実装まで一気通貫で扱うことで、技術的負債の肥大化と設計判断の属人化を抑制し、保守性・拡張性の高いシステムを構築できる開発体制を確立させます。

Issues

こんな課題を持つ企業におすすめ

ビジネス現場

  • Javaで開発しているが、設計の属人化・技術負債が課題になっている
  • DDDを導入したいが、概念の理解と実装のギャップが埋まらないでいる
  • jOOQ・MyBatis・Spring JPAなどORMが異なる環境でもDDDを統一設計したい
  • アーキテクト・テックリードを育成し、設計の意図をチーム全体に浸透させたい
Goals

本研修の到達目標

For Engineers

開発現場

  • 1「なぜその設計か」を根拠から説明できるようになるSOLID原則・GoF23パターン・DDDパターンをDDDの実装と連結して理解し、設計の意図をチームに言語化して伝えられるエンジニアになります。
  • 2DDDの設計プロセス全体を自走して実践できるようになるロバストネス分析から実装まで、DDDの全プロセスを自分の手で体験することで、現場のプロジェクトに即座に適用できる実践力を身につけます。
  • 3どのORMを使っていても通用する設計力を習得するRepositoryパターン・DIPの理解により、jOOQ・MyBatis・Spring JPAのいずれのプロジェクトでも、DDDの設計思想を適用できるようになります。
For Organization

組織への期待効果

  • 1新機能リリースの遅延・コスト超過の抑制システム成長に伴って増える「想定外のバグによる手戻り」を設計段階で構造的に防ぎ、機能追加にかかる工数とリードタイムの予測精度を高めます。
  • 2特定エンジニア依存による事業継続リスクの低減「あの人しか触れないコード」が生まれる属人化を、設計基準の共通言語化(SOLID原則・レイヤー責務)によって解消し、担当者交代時の引き継ぎコストを最小化します。
  • 3事業戦略の変更に追随できる開発体制への転換UIやDBといった技術スタックの刷新が、中核のビジネスロジックに波及しない構造を確立することで、事業ピボット・新規チャネル展開時のシステム改修コストを抑制します。
Features

本研修の特長

Feature 01

設計の「なぜ?」を言語化できる

単に動くコードを書くのではなく、SOLID原則や高凝集・疎結合といった基本思想を理解し、「なぜこの設計が良いのか」を論理的に判断・説明できる力を養います。

Feature 02

分析から設計への「架け橋」を実践

ユースケース記述からロバストネス分析(BCEモデル)を行い、シーケンス図・クラス図へと展開するプロセスを実際に体験。曖昧な要件を実装可能な設計へと落とし込む手法を学びます。

Feature 03

DDDアーキテクチャの完全理解

プレゼンテーション層・アプリケーション層・ドメイン層・インフラストラクチャ層のレイヤードアーキテクチャを基盤に、DTOやMapper、Repositoryパターンなど現場の設計課題への具体的アプローチを学べます。

Curriculum

研修カリキュラム

期間:3日間 / 使用言語:Java(Spring Boot)

日程 章・学習テーマ 学習内容・習得スキル
1日目 第1章:ソフトウェア設計の基本思想

モジュール化、関心事の分離、カプセル化、高凝集・疎結合など、変更に強い構造を作るための基本思想と、設計品質の評価基準(発展性など)を理解します。

第2章:設計原則とデザインパターン

SOLID原則(単一責任、開放閉鎖、依存性逆転など)や、DDDで用いられるデザインパターン(Entity、Value Object、Repositoryなど)、アーキテクチャの基本を学びます。

第3章:設計プロセスの概要

分析プロセス(何をするか)と設計プロセス(どう実現するか)の違いや、曖昧さを排除して共通理解を作るための「モデル(UML)」を用いたコミュニケーションの重要性を学びます。

第4章:サンプルと演習の要件

以降の演習の題材となる「商品管理(検索・登録・変更)」のユースケース記述、UI定義、テーブル定義、概念ドメインモデル、ユビキタス言語を確認します。

2日目 第5章:分析プロセス

ユースケースをもとに、BCEモデル(Boundary・Control・Entity)を用いたロバストネス分析を実施し、シーケンス図(動的振る舞い)やクラス図(静的構造)へと展開する手法を実践します。

第6章:設計プロセス

レイヤードアーキテクチャやパッケージ構成を決定し、設計原則・パターンを導入して「実装可能なレベル」へと詳細化する方針を学びます。

第7章:ドメイン層の設計

ビジネスルールを守る中核として、Value Object(値オブジェクト)、Entity(エンティティ)、Repositoryインターフェイス、Mapperインターフェイスの設計と実装方法を学びます。

3日目 第8章:インフラストラクチャ層の設計

データベース等の技術的詳細を隠蔽するため、例外クラス、Mapper、Assembler(集約の構築)、Repository(O/Rマッパー利用)の設計と実装を実践します。

第9章:アプリケーション層の設計

業務フローを統制する司令塔として、Usecase、Service、DTO、および層間のデータ変換(Mapper/Assembler)や例外の伝播設計を行います。

第10章:プレゼンテーション層の設計

外部との接点として、Controllerによる入出力制御、Schemaによる入力検証(バリデーション)、AOPを利用した横断的なExceptionHandlerの設計を学びます。

研修内容のカスタマイズについて 本研修で利用するO/Rマッパーや各種フレームワークについては、御社の実際の開発環境やプロジェクトの技術スタックに合わせてカスタマイズした内容での実施も可能です。ぜひお気軽にご相談ください。
Environment

必要な受講環境と前提知識

開発環境

研修のハンズオンはブラウザ版Visual Studio Codeで実施するため、ブラウザが利用でき、インターネット経由でHTTPS通信が可能な環境であればご参加いただけます。

  • Chrome(推奨)
  • Microsoft Edge
  • Safari など

使用する技術スタック

サンプルコード・解説は、主にJava(Spring Boot)をベースとしており、以下の構成で実装例が登場します。

言語Java
フレームワークSpring Boot
データアクセスO/Rマッパー
マッピングMapStruct
例外ハンドリング@RestControllerAdvice(AOPベース)

前提知識

  • オブジェクト指向プログラミングの基礎知識:クラス、インターフェイス、継承、カプセル化、ポリモーフィズムなどの概念を理解していること。
  • Webアプリケーションの開発経験:Web APIの基本的な仕組み(HTTPリクエスト/レスポンス)を理解していること。Javaでの開発経験があるとより理解が深まります。
  • データベースの基礎知識:リレーショナルデータベース(RDBMS)の基本的なテーブル構造や、CRUD操作(SQL)の基礎を理解していること。
Contact

お問い合わせ

本研修に関するご質問・お申し込みは、以下のフォームよりお問い合わせください。
担当者より2営業日以内にご連絡いたします。