ドメイン駆動設計では、ドメインの専門家について多くのことが言われています。彼らはドメインについて知っている人であり、ユビキタス言語を構築してドメインモデルを構築するために開発者と連絡を取る必要があります。
私の唯一の問題は、実用的な観点からはドメインのエキスパートが誰なのかわからないということです:彼らはエンドユーザーですか?彼らはソフトウェアの開発を求める人々ですか?彼らは、ソフトウェアによって解決されている問題に対処するランダムな人々ですか?
実用的な観点から、ドメインエキスパートは誰ですか?ソフトウェアを構築するときにどこを探すべきですか?
ドメインエキスパートとは何ですか?
ドメイン駆動設計 を使用してソフトウェアを開発する場合、主な焦点は、ソフトウェアが使用されるドメインの表現であるドメインモデルにあるはずです。
会計ソフトウェアの例を見てみましょう。ドメインはアカウンティングであり、ドメインモデルを構築するには、ドメインオブジェクト(アカウント、借方、貸方、転記、元帳など)とそれらを管理するルール(たとえば、「転記では、すべての借方は常にすべての貸方の合計に等しい必要があります」、または「元帳で作成された投稿は削除できません」、または「すべての投稿について、誰が投稿したかについての監査証跡が必要です」それはいつ」)。
モデル(およびその周辺のソフトウェア)を開発するには、 ドメインの知識 を取得する必要があります。この知識は、利用可能なソース(本、ビジネスプロシージャマニュアルなど)から抽出できます しかし、正しく理解するために 、 ドメインエキスパート が必要です(-と呼ばれることもあります) 主題専門家 )。
ドメインエキスパートとは何ですか?
会計の例では、ドメインの専門家はおそらく会計士でしょう。彼/彼女はおそらくシステムの将来のユーザーになるかもしれません(この理由のために「 key user 」と呼ぶ人もいます)。しかし、他の場合には、システムを決して使用しないビジネスエキスパートである可能性があります(たとえば、生産エンジニアは生産ラインと生産プロセスを完全に知っているが、将来のユーザーは生産オペレーターになる)。
すべてのユーザーがドメインのエキスパートになるわけではないことに注意してください。ドメインエキスパートは、設計したドメインモデルの有効性を検証できるように、自分のドメインに対する何らかの権限を持っている必要があります。
最後になりましたが、多くのシステムでは、ドメインの全範囲をカバーするために、複数のドメインエキスパートが必要になる場合があります。たとえば、ERPの場合、会社全体:販売、調達、経理、生産、倉庫、...)。
ビジネスエキスパートはどこにいますか?
普遍的な答えを出すのは難しい。私に何が効果的かを説明できるだけです。それらを見つける最善の方法は、将来のシステムについて顧客に尋ねることです。
システムが何を行うかを説明できる専門家、および対象となる分野でのビジネスの仕組みを説明できる専門家、およびトピックについてのより複雑な質問に答えられる専門家を求めます。
ソフトウェアがドメインのニーズにどのように適合するかについて、方向性と選択を承認する権限を持つ人に尋ねます。
追加の読み:
私にとっては、適切な学術研修と、現場での実務経験があります。他の労働者は彼らに助言を求めに来る。彼らは権威による単なる専門家ではありません。
また、要件と設計の違いを誰かが理解する必要もあります。ほとんどのプログラマにとってそれは当たり前のことですが、設計から要件に抽象化することが本当にできないユーザーを獲得します。彼らは、ボタンについて語らないと、データ、データ関係、ビジネスルールについて語ることができません。
自社製品の場合は、ウィズアウトの誰か。一般的な商用製品の場合、複数の会社で働いているものもあります。
個人的体験:
私にとって、ドメインエキスパートは私が構築したツールを使用する人々です。
彼らはツールやドメイン固有の言語を設計することはできません-それは彼らが持っていないスキルです。 (彼らは可能だと思っているかもしれませんが、そうではありません。一般化する方法がわかりません。)
私は彼らに彼らが何をするかについて尋ねなければなりません。 (これは「ナレッジエンジニアリング」と呼ばれていました。)doingが何をするか試してみるとさらに良いです。
(これらのサイトの多くのプログラマーは、プログラミングの方法を知っているだけでよいと考えているようです。それは、何をすべきかを指示されることだけの問題です。間違っています!ユーザーの頭の中に入ってください。昔の数学のコースの。)
次に、ツール/言語のプロトタイプを作成して説明したり、試してもらいます。彼らは私にそれの何が悪いのか教えてくれます、そして私たちはもう一度すべてそれをします。 3回ほど試してみると、これはかなり便利なツールです。
「ウォーターフォール」や「アジャイル」のような「方法論」はたくさんあります。私にとって、最も効果的なのは「迅速なプロトタイピング」です。