http://i.stack.imgur.com/YZXZN.png(現在、画像を埋め込むことは許可されていません)
上記のクラスモデルで本当に助けを借りることができました。私は、大学でオブジェクト指向を学び、試験を書き、それに合格したが、実際のコードに原則を実装することに着手したことのない「それらの」開発者の1人であると言うのは恥ずかしいことです。成文化を始める前に、私は本当に座ってアプリケーションの設計を検討したことはありませんでした。したがって、私の設計とコーディングのスキルは、モノリシックなレガシーバンキングアプリケーションの開発と保守の重みの下でゆっくりと衰退し、停滞しています。これから何年も経った後、私は間違いなく変化の時だと判断しました!私はデザインパターン、DDD、NoSQL、DIなどの世界を深く掘り下げてきました。この2週間は、私にとって非常に激しい経験でした。また、大企業や銀行で働いていたときに見逃していた膨大な量のベストプラクティスや技術に涙を流しそうになったと思うこともあります。最先端のテクノロジーと優れたデザインアプローチからどれだけ離れていたのか、信じられませんでした。突然のすべてのスワスが、コーディング麻痺の状態に陥る恐れがありました。デザインをさらに微調整する必要がある、または特定のトピックについてさらに研究する必要があると感じたため、コーディングを開始できませんでした。ただし、十分です。プロジェクトをクラックして、少なくとも最初のイテレーションを行う必要があります。そして、すべての突然のスワスは、私をコーディング麻痺の状態に陥らせる恐れがありました!デザインをさらに微調整する必要がある、または特定のトピックについてさらに研究する必要があると感じたため、コーディングを開始できませんでした。ただし、十分です。プロジェクトをクラックして、少なくとも最初のイテレーションを行う必要があります。そして、すべての突然のスワスは、私をコーディング麻痺の状態に陥らせる恐れがありました!デザインをさらに微調整する必要がある、または特定のトピックについてさらに研究する必要があると感じたため、コーディングを開始できませんでした。ただし、十分です。プロジェクトをクラックして、少なくとも最初のイテレーションを行う必要があります。
とにかく、私の問題については、十分なドラマです:
ゴルフアプリのモデル作成に取り掛かりました。DDDにある程度準拠し、NoSQL(RavenDB)を利用したいので、次の要件に着手しました。
- 私のプラットフォームスタックはWindows/IIS / MVC 3.0/RavenDBです
- 骨材のルーツを見つける必要があります!私はそれらを、それ自体で存続することができる私のシステム内の唯一の要素として定義することに着手しました。他のすべては、単に集合体の「サブコンポーネント」と見なしました。実際の動作はまだ定義されていないことに注意してください。
- 私の集約ルートは、RavenDBドキュメントストアに実際に保持される唯一のクラスであり、「現状のまま」保持されます。大きなツリーのようなクラス構造を持つことは、実現されるパフォーマンス上の利点の観点から、RavenDBの最良のシナリオであるように思われます。
- RavenDB APIは流暢で非常に軽量であると感じているため、リポジトリレイヤーの必要性は感じていません(Ayendeの投稿の一部をフォローしています)。必要に応じて、コントローラーのカスタムアクション属性を使用してセッションを開いたり閉じたりするだけです。リポジトリレイヤーなしでテストするのは難しいかもしれませんが、確かにいくつかの「メモリ内」ドメインオブジェクトをモックすることができるはずです。
- DBへの書き込みは、別のサービスレイヤーで行われます。
- ある時点で私は立ち止まり、「いったいどこに自分のドメインの振る舞いを置くつもりなのか!?」と自問しました。Webの検索から得られた一般的なコンセンサスは、ドメイン(エンティティ)に動作(ビジネスロジック)を持たせず、すべてをサービスレイヤーで処理する必要があることを示しているようです。しかし、Eric Evansをいくつか読んだ後、私のドメインの動作の多くがそこに存在するはずだと確信しています...ドメイン内に!
質問 -DDDと建築設計の分野における善意の初心者として、私は少なくとも正しい方向に進んでいますか、それとも破壊される運命にありますか?-上記に対する考え、警告、建設的な批判、洞察をいただければ幸いです。