Object-Oriented Conference 2024
採択
2024/03/24 16:00〜
Track A(共2-201)
招待セッション(40分)
招待セッション

設計の知識と技能で駆動するソフトウェア開発

masuda220 増田 亨 masuda220

はじめに

  • 設計と開発プロセスの関係性
    • システムの構造とタスク構成
    • 設計の影響(生産性、外部品質)
  • ソフトウェア設計の知識と技能
    • 経験則 (経験による暗黙知 ⇒言語化:原則、パターン、体験談)
    • 習熟 (手を動かして内面化された経験則)
    • 共創 (知識と技能の連結)

① ソフトウェア設計の基礎知識

a. 基本課題

  • 複雑さと発展性
  • 大きな泥団子
  • 巨大な一枚岩(モノリス)

b. 解決のアプローチ

  • 関心の分離→部品化→モジュール化
  • 交換容易性(モジュラー性)

c. モジュール化:基本となる4つの技法

  • モデル
  • 直接的な写像
  • カプセル化
  • 仕様

② モジュール化

a. モジュールの分類

  • 機能(Function)と型(Type)
  • インバウンド、アウトバウンド、演算
  • 可変と不変
  • ブレークダウンとビルドアップ

b. オブジェクト指向プログラミングのモジュール化

  • 抽象データ型
  • 型の連結
  • 型の分類(subtyping)
  • 型の階層化?
  • 可変から不変へ

c. ドメイン駆動設計のモジュール化

  • 事業活動の複雑さ(最適化問題)
  • 複雑な業務ロジック
  • 分析モデルと設計モデルの一致 (ユビキタス言語)
  • アプリケーション固有の型 (値オブジェクト、集約、サービス)

③アプリケーションのモジュール構成(参照モデル)

  • コア(中心)
    • 計算判定
    • 業務機能
  • ポート(境界)
    • パッシブ(primary)
    • アクティブ(secondary)
  • アダプタ(周辺)
    • primary : テスト、Web UI、Web API、バッチ、イベントリスナー
    • secondary : 内部データソース、外部データソース、外部サービス

④モデル駆動設計

  • 全体
    • 事業活動、要件、アーキテクチャ
  • コア(中央)
    • 業務ロジック、ドメインモデル
    • 業務機能、アプリケーションサービス
  • アダプター(周辺)
    • 記録モデル、データベーススキーマ
    • 連係モデル、プロトコル設計
    • 対話モデル、インタラクション設計