こんにちは。青木です。
当エントリは「C#アドベントカレンダー」の2015/12/21分です。前のエントリは、もりさんの「Code整形でちょっと役立つCodeMaidの利用方法」、次のエントリはJHashimotoさんです。
DDDはエリック・エバンス氏が提唱しているソフトウェア設計方針で、システム開発の複雑さをシンプルにする設計思想として、2003年に「Domain-Driven Design: Tackling Complexity in the Heart of Software(邦訳:ドメイン駆動設計)」が発売されました。
具体的には「複雑なドメインの設計はモデルベースで行うべきであり」、「また大半のソフトウェアプロジェクトではシステムを実装するための特定の技術ではなくドメインそのものとドメインのロジックに焦点を置くべき」という考え方となります(Wikipediaより)。
DDDを始めるにあたって、お勧めの書籍
当社でも、C#とDDDによる開発を行うケースが出てきました。
それに伴い、2015年に翻訳版が発売された書籍「実践ドメイン駆動設計(通称 IDDD本)」の社内読書会を行っています。
先日、この読書会の内容について、Sansanさんの勉強会で発表してきました。
DDD勉強会での発表風景
このスライドでは「実践ドメイン駆動設計(IDDD)」の基本となるポイントを整理していますので、よろしければ参考にしてください。
DDDは、思想や哲学的なもののため、特別な技術には依存していません。
そのため、C#で導入してみようと思えば問題なく始めることができます。
前述の書籍「IDDD本」のサンプルコードはJavaで書かれていますが、著者Vaughn氏は書籍「Applying Domain-Driven Design and Patterns with Examples in C# and .NET(Jimmy Nilsson氏:邦題「ドメイン駆動」)」のおかげでC#/.NETコミュニティにはDDD開発を行う素晴らしい土壌があるとも言っています。さらに、IDDD本のレビュー者の多くが.NET開発者だったとも書いています。
このように海外では.NET+DDDは普及しているようです。
IDDD本のC#のサンプルコードもGitHubで提供されているので、C#でDDDを行うことは可能だと考えています。
C#でDDDをする場合の注意点
DDDでは、オブジェクト指向、パターン、モデリングに対する理解がないと失敗してしまったり、成果物となるコードが逆に複雑になってしまうことがあります。
RDBだけでなく、NoSQLやDocument指向データベースに対する知識も深める必要があります。
Microsoft技術スタックでは、Micrsoft AzureのTable StrageやDocumentDBに対する理解が必要になってくるかもしれません。
また、Webで実装する場合には、ASP.NET MVC (WebAPI)や、Azure WebAppsの知識も必要となります。
クラウドで連携を行う場合には、Azure Queue Storageの知識も必要になるかもしれません。
このような背景もあるため、最初は、スキルかポテンシャルの高いメンバーで、継続的な教育を行い、チームの底上げを行う必要があります。
(なお、DDD開発は、教育や顧客フィードバックを重視するアジャイル開発が前提となっています。)
さいごに
参考
Channel9 「Developing Core Business Applications with DDD and Microsoft .NET」 TechEd 2013