SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 Summer レポート(AD)

2つのSaaSをフルスクラッチで開発して分かった、開発スピード向上を実現するアーキテクチャ選定の勘所

【23-A-8】ドメインを分析し、設計に落とし込むには? 2つのSaaSをフルスクラッチで開発した経験から学んだこと

  • X ポスト
  • このエントリーをはてなブックマークに追加

DDDの適用と、オニオンアーキテクチャの採用による解決

 これらの問題を改善するために、まずロジックを細かく分解し、凝集度を上げるアプローチを試みた。しかし、その結果、依存関係が複雑化し、どのロジックがどこから呼ばれているのかが不明確になることが増えた。これにより、ユースケースの一部を変更する際にどこを修正すべきかが分からなくなる問題が発生した。最終的に、どのアーキテクチャでも、変更箇所とその影響範囲が明確であれば問題は解決すると結論付けた。そして、ロジック層にはアプリケーションロジックとドメインロジックの2種類が存在するという理解に至った。畠中氏は「これはDDDの書籍などでも言及されていて、実際に達成すべき重要な課題だと感じました」と振り返る。

 アプリケーションロジックは仕様に基づいたもので、例えばメディカルフォースではこういうロジックがあるが、競合のプロダクトでは異なるといったものが該当する。アプリケーションロジックは、仕様に基づいて変更が容易にできる。一方、ドメインロジックは知識として蓄積され、メディカルフォースでも競合のプロダクトでも共通となる要素が含まれる。この2つを明確に分けることを意識した。

ロジック層をアプリケーションロジックとドメインロジックに分ける
ロジック層をアプリケーションロジックとドメインロジックに分ける

 例えば、在庫アラートのケースでは、アラート通知というドメインロジックを用意しこちらに実際の処理を書いておく。それをアプリケーションロジックである在庫使用ロジックが呼び出す形にした。このようにすることで、高凝集・低結合を実現できる。また、アプリケーションロジックからはアプリケーションロジックを呼び出さず、ドメインロジックからはドメインロジックを呼び出さないというルールを守ることで、結合度を低くしながら高凝集を保った。カルテの名寄せ処理においても、患者の名寄せ処理をドメインロジックとし、アプリケーションロジックから呼び出すことでより効率的に管理できる。

 畠中氏は、仕様変更だけでなく、改善活動についても話した。当初、フレームワークやORマッパーの変更は滅多にないと想定していたが、同社が活用するNode.jsの領域では、ORマッパーのデファクトスタンダードが変わってきていたり、発展したフレームワークも登場したりしている。フレームワークに依存しない設計方針をとっていたが、より変化に耐えられるように方針を転換した。また、データアクセス層については、エンティティの永続化と復元だけを担当させることを重視し、インフラストラクチャー層を設け、DBやORマッパーに対する処理を外側に配置した。

オニオンアーキテクチャ
オニオンアーキテクチャ

 このように、高凝集・低結のためにさまざまなルールを設定したが、メンバーに周知徹底するのが難しいため最終的にオニオンアーキテクチャを採用した。ドメインモデルが中心にあり、ドメインサービス層、アプリケーションサービス層がアプリケーションの核となり、その周りさらにユーザーインタフェースやインフラストラクチャー、テストがある。

 畠中氏はその効果について「結果として、仕様変更やテストがかなり楽になりました。当初は新規実装の速度が少し遅くなるのではないかと懸念していましたが、長期的に見ると、コードの再利用性が高まり、開発スピードも向上しています。これが非常に良かったと思っています。この経験を踏まえて、DDDやオニオンアーキテクチャについて考えていただけると幸いです」と語った。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2024 Summer レポート連載記事一覧

もっと読む

この記事の著者

森 英信(モリ ヒデノブ)

就職情報誌やMac雑誌の編集業務、モバイルコンテンツ制作会社勤務を経て、2005年に編集プロダクション業務やWebシステム開発事業を展開する会社・アンジーを創業。編集プロダクション業務においては、IT・HR関連の事例取材に加え、英語での海外スタートアップ取材などを手がける。独自開発のAI文字起こし・...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

丸毛 透(マルモ トオル)

インタビュー(人物)、ポートレート、商品撮影、料理写真をWeb雑誌中心に活動。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:株式会社メディカルフォース

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20076 2024/09/26 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング