みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
「ノンプログラマーのためのスキルアップ研究会」は、ノンプログラマーがプログラミングをはじめとするITスキルを学び合うコミュニティです。
さて、先日の定例会「ノンプログラマーのためのドメイン駆動設計超入門」のレポートをシリーズでお送りしております。
前回の記事はこちら。
「オブジェクト指向」について詳しく解説しました。
今回は、いよいよ「ドメイン駆動設計」について触れていきますよ~
ということで、今回は「ドメイン駆動設計がノンプログラマーの開発にもたらしてくれそうなこと」についてお伝えします。
ちなみに当日の様子は以下、Togetterのツイートまとめもご覧くださいませ。
では、行ってみましょう!
前回までのおさらい
ドメイン駆動設計の話にはいる前に、これまでの復習をしておきましょう。
ノンプログラマーと設計
まず、設計についてです。
設計とはソフトウェアをどうつくるか決めることです。
大規模なウォーターフォール開発では、責任の所在をはっきりさせたり、テストをしたりするために、設計は確実に行われる工程です。
その成果物としては、「仕様書」という明確なアウトプットがあります。
しかし、アジャイル開発では、都度判断しながら「どう作るか」を決めてコードに反映します。
設計で何をすべきか、なぜやるのかが、わかりづらいという問題があります。
ノンプログラマーの開発は、目的とするソフトウェアが小規模であることが多く、どちらかというとアジャイルと近い開発になり、設計に関しては同じような疑問が残ります。
ノンプログラマーとオブジェクト指向
つづいて、オブジェクト指向についてです。
オブジェクト指向とは、データと処理をオブジェクトにまとめておこうという方針のことです。
コードの可読性、変更容易性、再利用性という意味ではとても強力な武器になります。
しかし、その学習コストはやや高い一方で、使うメリットや活用場所のわかりづらさがあります。
したがって、ノンプログラマーにとってはなかなかハードルが高いという現状があります。
設計とオブジェクト指向についての問題
以上から、ノンプログラマーの開発と考えると、以下のような問題がありました。
- 設計とは何をするものか、なぜ必要なのかがわかりづらい
- オブジェクト指向を使うメリット、活用場所がわかりづらい
ドメイン駆動設計との出会い
「現場で役立つシステム設計の原則」の設計
そんな問題を抱えている中、こちらの書籍に出会いました。
「現場で役立つシステム設計の原則」です。
この書籍では、以下のようなことが書かれていました。
- 業務をオブジェクト指向で整理する
- 業務の表現と命名を一致させる(顧客、商品、注文、納期など)
- 開発者は業務知識と言葉を獲得すべき
- 分析と設計を同一人物が担当する
書籍ではその名称がはっきり示されていたわけではなかったのですが、このような方針の設計を「ドメイン駆動設計」ということを知りました。
ドメイン駆動設計前後のノンプログラマーの開発
これまでのノンプログラマーの開発は、以下の図のように示すことができます。
- 要件を明らかにして、それを満たす手続きを明確化する
- 手続きを翻訳する
- コードはfunction文によるいくつかの関数、if文やfor文による制御構文で構成される
つまり、要件からコードへの翻訳が必要です。
さらに、たとえばしばらく経ったタイミングで、コードを改めて読んだり、変更したりする機会があったとすると、その場合コードを逆方向に翻訳をして理解するという段取りが必要になります。
このめんどくささがあると、「できれば変更したくないな~」などとなったりしますよね。
一方で、ドメイン駆動設計後は以下のようになると見受けました。
- 要件をオブジェクト指向的に整理する
- それをそのまま忠実にコードに実装する
- コードはStaff、Customer、Emailなどふだん使っていることばで表現されたクラスで構成される
こちらでは、要件を整理した業務の表現を、そのままの言葉でコードに反映されます。
つまり、ドメイン駆動設計で作れば、実装する際も、それを読み解く・変更する際も、面倒な翻訳作業が不要になる、そのように理解できました。
ドメイン駆動設計はノンプログラマー向け?
もともと、ノンプログラマーは業務の知識とその言葉は十分に獲得しています。
ほとんどの場合、分析(要件定義)、設計、開発をひとりで担当しています。
「業務をオブジェクト指向で整理する」という部分は、現時点ではどのようなことなのかわかりませんが、そこさえ、うまく習得することができれば、そのままハマるかも…!
ということで、ドメイン駆動設計はノンプログラマーにはとても向いているのでは?とビビビッ!ときたのです。
さらに、もやもや抱えていた、以下の問題を一気に解決してくれるのではという強い期待もありました。
- 設計とは何をするもので、その理由は何か
- オブジェクト指向の使いどころの明確化
まとめ
以上、ドメイン駆動設計がノンプログラマーの開発にもたらしてくれそうなことについてお伝えしました。
実際にどのようにコードを書くのかは別として、ドメイン駆動設計がとても有用そう…というところを感じていただければ幸いです。
次回は、ドメイン駆動設計に深く入り込んで、その概要と目的をお伝えします。
どうぞお楽しみに!