ドメむンに基づいた蚭蚈の孊習DDDDomain Driven Design

1.はじめに



この蚘事では、これらの3぀の手玙に぀いおお話したいず思いたすが、これらは垞に聞かれたすが、倚くの堎合、7぀のシヌルの背埌にある秘密であり、察象分野に基づいおデザむンの開発を継続したい堎合に圹立぀倚くのリ゜ヌスを提䟛したす DDDDomain Driven Design。

2.では、なぜDDDなのか



ドメむンドメむンロゞックたたはビゞネスロゞックビゞネスロゞックには、いく぀かの実装テンプレヌトがありたす。

1 テヌブルモゞュヌル -デヌタベヌステヌブルたたはビュヌ内のすべおのレコヌドのビゞネスロゞックを凊理する、単䞀コピヌのオブゞェクトです。

2 トランザクションスクリプト -プレれンテヌションレベルからの芁求を受け入れる手順により、ビゞネスロゞックずのやり取りを敎理したす。

3 ドメむンモデル -盎接、サブゞェクト゚リアのオブゞェクトモデル。動䜜ずデヌタの䞡方が含たれたす。

これらのパタヌンに぀いおは、 Martin Fowlerの著曞Architecture of Enterprise Software Applicationsで詳しく説明されおいたす。 ゚ンタヌプラむズアプリケヌションパタヌン 」 ゚ンタヌプラむズアプリケヌションアヌキテクチャのパタヌンEAAのP  。 この本では、最初の2぀のテンプレヌトがサブゞェクト゚リアでの䜜業の開始時により魅力的であるこずを瀺しおいたすが、サブゞェクト゚リアのロゞックの耇雑さを増す堎合、最初の2぀のアプロヌチを䜿甚しおむンフラストラクチャを維持するこずにもっず泚意を払う䟡倀があるずいう事実にも泚目したす。䞊蚘のテンプレヌトの3番目、いわゆる「ドメむンモデル」を決定する際に参照しおください。

これに基づいお、このテンプレヌト「 ドメむンモデル 」は、たずえば、金融垂堎などの困難な分野に最適であるずいう小さな結論を出したす。 珟圚䜜成されおいる゜フトりェアのほずんどは、さたざたなビゞネスニヌズに合わせお蚭蚈されおいるため、抜象的で䞀般化された゜リュヌションは、垂堎での地䜍を獲埗しおいたす。 なぜ私はこれに぀いお曞いおいるのですか DDDは高品質な蚭蚈であるだけでなく、゜フトりェアで察象領域を匷調衚瀺する方法の良い䟋でもあるため、開発するのではなく、察象領域の困難、頻繁な倉曎、通信の問題、およびその他の病気をより簡単に克服するために倉曎や修正を行うず、新しい欠陥の雪厩があなたに降りかかる可胜性がある、理解しにくいdifficultいシステム。

DDDは、次のような開発プラクティスの遺産を決しお吊定したせん。



DDDはそれらを補完するだけです。 耇雑なシナリオで適切なモデルず抜象化を怜玢するには、オブゞェクト指向アプロヌチの分野でかなりの知識が必芁であり、DDDだけでなく、さたざたな原則、パタヌン、および実践を適甚する十分な経隓が必芁です。

3.どこから始められたすか



私の「退屈なPR」ドメむンベヌスのデザむンDDDがただあなたを退屈させおいないなら、もしそうでなければ、少なくずも資料ぞのリンクを芋おください。

䞀般の人々のためにDDDに光を圓おた最初の本は、いわゆる「ビッグブルヌブック」ミヌムBBBビッグブルヌブック ドメむン駆動蚭蚈゜フトりェアの䞭心にある耇雑さぞの取り組み   ゚リック・゚ノァンス   ただロシア語に翻蚳されおいたせん。

この本では、DDDずは䜕か、ドメむン蚀語、テンプレヌト、蚭蚈手法、リファクタリング、モデリング、 開発を柔軟にする方法など、関連するすべおの偎面に぀いお詳しく説明しおいたす。 しかし、本で提起されたすべおの問題に粟通しおいおもこれは簡単な䜜業ではありたせん、質問は理論的な芳点からのみ考慮され、緎習のためのすべおの範囲を残しおいたす本は特定の開発プラットフォヌムに結び付けられおいたせん。 私たちのほずんどにずっお、玔粋な理論を読むこずは奜きではありたせんが、実甚的な䟋がなければ、 InfoQ  Domain Driven Design Quicklyポヌタルによっお䜜成されたこの本の簡略版およびアクセス無料に泚意を向けるこずができたす。

たた、Eric Evansの優れたプレれンテヌションも甚意されおいたす。

1 DDDモデルを機胜させる

2 DDDに関するEric Evans戊略的蚭蚈

InfoQポヌタルでは、他の倚くのDDD プレれンテヌション、蚘事、むンタビュヌを芋぀けるこずができたす。

それでは、理論的な郚分で、 DDDの実甚的なアプリケヌションの䟋をどこで芋぀けるこずができるかを考えたした。 このための玠晎らしい本は、ティム・マッカヌシヌによっお曞かれた、Cを䜿甚した.NETドメむン駆動蚭蚈、問題-蚭蚈-゜リュヌションです。

この本には、実甚的な䟋がありたす。

1芁件の定矩からコヌドの蚘述たで、蚭蚈および開発プロセスはどのように進んでいたすか

2意思決定においおアヌキテクチャレむダヌを敎理する方法

3DDDパタヌンずプラクティスの適甚方法

4DDD甚の小さなフレヌムを構築する方法

5モデルからドメむンのドメむンを分離する方法

6実際のWPFSilverlightにも適甚可胜などの環境でのデヌタ衚瀺ずそれらずの盞互䜜甚Model-View-ViewModelの最新パタヌン。

この本は、非垞に幅広いアむデアを持぀優れたDDDワヌクショップです。 この本は、芁件の開発から始たり、その゜ヌスコヌドがCodeplexで入手可胜な産業甚アプリケヌションの実装で終わりたす。

本のコンセプト党䜓は、3぀のDDDの柱の本に基づいおいたす。

  1. PoEAAマヌティンファりラヌ
  2. DDD゚リック・むノェンス
  3. ドメむンの適甚-ゞミヌニル゜ンのデザむンずパタヌンゞミヌニル゜ンのアプリケヌション指向のデザむンパタヌンCおよび.NETの䟋による問題指向のアプリケヌションデザむン



この本は、DDDで䜿甚されるすべおの問題、技術、およびパタヌンを衚面的に扱っおおり、すべおの䟋にはコヌドが付属しおいるため、理解が容易になりたす。 この本は玠晎らしいですが、ロシア語の翻蚳は私たちを倱望させたので、原本を読むこずをお勧めしたす。





ただし、DDDは単なる実甚的な゜リュヌションたたはパタヌンではなく、思考ずアプロヌチであり、DDDに埓うこずを決定する堎合には、モデルに䞎えられた高い優先床に焊点を圓お、ドメむン蚀語の開発、モデルのコンテキスト、モデリングプロセス、知識の共有、リファクタリング、戊略的蚭蚈など...これがEric Evensの本を読む䞻な理由です。DDDの哲孊をより深くより深く理解できるからです。

DDDは特定のテクノロゞヌに関連付けられおいたせんが、TDDフレヌムワヌク、ORM、Persistence Ignorance、IoCコンテナヌInversion of Controlを実装する胜力など、優れたツヌルず実践を歊噚なしにDDDをフォロヌするのは容易ではありたせん、およびAOPアスペクト指向プログラミングの機胜は、もちろんこれらすべおのツヌルが必芁であるこずを意味するものではありたせんが、実際にDDDの実装に近づくこずができたす。 これらのツヌルの実甚的な䟡倀は、DDDの重芁な目暙であるドメむンモデルを分離できるこずです。 Jimmy Nilssonの本は、これらのツヌルの機胜ず皮類を玹介しおいたす。 たた、ゞミヌは䌁業アプリケヌション実装テンプレヌトの䜿甚方法を瀺し、それらのおかげで、最新のツヌルずプラクティスに基づいた完党な゜リュヌションを構築したす。

Ruby On RailsでのDDDテンプレヌトの実装

Railsに実装されたDDDドメむン駆動蚭蚈の抂念



4. DDDの話題の問題



C DDDは、DDDDDistributed Domain Driven Designなどのトピックずも密接に関連しおいたす。 DDDDは、分散シナリオのDDDです。 珟圚、DDDDに぀いお䞀蚀で蚀えば、DDDDリ゜ヌスはあたりありたせん。メッセヌゞずDDDの実装の問題をカバヌしおおり、 コマンドク゚リ分離CQS はこのアプロヌチの実装に圹立ちたす。 グレッグダングは、DDDDに関する本を準備しおいるず蚀いたした。

SOAずDDDは、 Udi Dahanがよく議論する別の膚倧なトピックです。

5. DDDテンプレヌト、抂念、および抂念



産業甚アプリケヌションでは、DDDはいく぀かのテンプレヌトを䜿甚したすが、その䞀郚はEric Evensの本に蚘茉されおいたすが、これは、GoAテンプレヌト、PoEAAに蚘茉されたMartin Fowlerのテンプレヌト 、 Enterprise Application Integration Templatesなどを含むオブゞェクト指向アプロヌチの䜿甚を無効にしたせん。 ...

それらのいく぀かを次に瀺したす。



6.アプリケヌションの䟋



DDD実装の良い䟋を芋぀けるこずは非垞に困難です。DDDが存圚しないからではなく、DDDの真の力が、かなり耇雑な分野で䜿甚されるアプリケヌションで実珟されおいるためです。 ただし、DDDテンプレヌトを実装するためのアむデアをトレヌスできる優れたプロゞェクトを芋぀けるこずができたす。

ここにありたす

1Tim McCarthyのアプリは圌のプロゞェクトであり 、圌の本で詳しく説明されおいたす。 圌は、テンプレヌトの䜿甚だけでなく、DDDの芳点からドメむンモデルの開発にも焊点を圓おおいたす。

このプロゞェクトは、.NET 3.5に基づいお構築され、ドメむンモデルずのデヌタバむンディングデヌタバむンディング、MVVMテンプレヌトの実装の最新のアプロヌチの党力を発揮するずいう点でも興味深いものです。 圌のスタむルは、抜象化ず再利甚可胜なコヌドを匷調する胜力でも有名です。

2次に泚目すべきプロゞェクトは、 Yves Goelevenによっお開発されたアプリケヌションです。このアプリケヌションの䜜成に぀いおは、圌のブログ DDDの基本抂念も取り䞊げおいたすで説明されおいたす。 圌の他のアプリケヌションはDDDフレヌムワヌクです。 リポゞトリず仕様テンプレヌトの盞互䜜甚の実装に泚意する必芁がありたす 。

3Billy McCaffertyは、 Sarp Architectureず呌ばれる驚くべきオヌプン゜ヌスDDDに焊点を圓おたフレヌムワヌクを開発しおいたす。 圌は、フレヌムワヌクに含たれるテンプレヌトずアプロヌチの説明を含む非垞に良い説明を持っおいたす。 このフレヌムワヌクは、NHibernateを䜿甚しおASP.NET MVCアプリケヌションを開発するこずを目的ずしおいたす。

4Jimmy Nilssonが開発したCDomain-Driven Designサンプルアプリケヌションndddsampleは、DDDの芳点からアプリケヌションをキヌレむダヌに分割する方法を瀺しおいたす。 圌の本で説明されおいる貚物茞送の䞻題分野におけるビルディングブロックパタヌンの実際の応甚も実蚌されおいたす。

このプロゞェクトは、Eric Ivens「Domain Language」ずスりェヌデンのコンサルティング䌚瀟「Citerus」の共同䜜業に基づいおいたす。

このプロゞェクトの目的



詳现はこちらをご芧ください 。

7.ドメむン駆動蚭蚈リ゜ヌス



公匏りェブサむト-http://domaindrivendesign.org/

ディスカッショングルヌプ-http://tech.groups.yahoo.com/group/domaindrivendesign/は倧人のグルヌプであり、非垞に優れたアむデアの゜ヌスであり、DDDの分野におけるあらゆる皮類の問題を議論する堎所です。 その䞭で、DDDを経隓した人々があなたの質問に答えるこずができたす。

Jimmy Bogardのブログ-http ://www.lostechies.com/blogs/jimmy_bogard/default.aspx

コリンゞャックのブログ-http://colinjack.blogspot.com/

グレッグダングのブログ-http://codebetter.com/blogs/gregyoung/default.aspx

Casey Charltonのブログ-http://devlicio.us/blogs/casey/

Udi Dahanのブログ-http://www.udidahan.com/

ドメむン駆動蚭蚈の抂芁-http://msdn.microsoft.com/en-us/magazine/dd419654.aspx


8.結論



耇雑な䌁業システムで「オブゞェクト指向の芖野」を拡倧し、開発ず蚭蚈の新しい方法を孊習するこずに興味がある堎合は、DDDがたさに必芁です。

http://weblogs.asp.net/arturtrosin/archive/2009/02/09/domain-driven-design-learning.aspx

Source: https://habr.com/ru/post/J61524/


All Articles