この質問はかなり主観的なようですので、ここに投稿します。
あなたはASP.NET MVCを使用してStackOverflowの独自のバージョンを書いているとしましょう、そうのようなクラスがありQuestion、Answer、User、などあなたがしている怠惰な、あなたはエンティティフレームワークを使用することにしましたのでは。したがって、上記のすべてのクラスにはナビゲーションプロパティがあります。QuestionそのAnswersをAnswer知っている、User投稿者を知っているなどです。
Martin Fowlerの本をたくさん読んだことがあるので、すべてのビジネスロジックを実装するためのサービスレイヤーが必ずあるはずです。ASP.NET MVCは、UIおよびアプリケーションロジック関連の機能にのみ使用します。
2つの質問があります。
- あなたは直接のオブジェクト公開します
Question、Answerコントローラーにして他の人を? - ビューに対しても同じことをしますか?
私は基本的に自分のアプリケーションにREST APIを提供するつもりもありませんし、「ちょっと、MY VIEWはそれが何であるQuestionかを知っているので、それが悪いかどうかわかりません。気に入らない!」
Questionクラスに次のようなフィールドがTimePostedあり、PostNewQuestionビューをそのクラスにバインドする場合に特に興味があります。そのフィールドをページ上のどのコントロールにもバインドしない場合は、投稿されないのでnull、コントローラー側でオブジェクトを取得したときにそのフィールドを設定します。それは大丈夫ですか、それとも悪い考えですか?私が考えている2つの反対のアプローチは、「どこでもDTO / ViewModelを使用すること」と「wtf、クラスが少ないほど常に良いことです!」です。
正しいアプローチは何だと思いますか?(私は直接的な答えがないことを知っているので、問題は「DTO / ViewModels /その他のアプリのアーキテクチャに適しているかどうかを判断するために何を検討すべきか」です。)
また、Stackoverflowの非常に簡略化されたクローンを検討していることにも注意してください。
- これはWebのみのプロジェクトです(REST APIなどは公開しません)。
- ユーザー、質問、回答、タグ、検索機能があります(優れたビジネスロジックはありません)
- 1日あたり100人ほどのアクティブユーザーがいます(特別なパフォーマンス要件はありません)
- 新しいメンバーが開発チームに加わった場合でも、コードは読みやすく、驚きや特別な関心のある場所があってはなりません。
最初の3つのポイントが変更された場合の考えを表明することもできます-「顧客は、10000人の同時ユーザーを許可するために私たちのサービスを望んでいる」または「すべてのユーザーが15分に1回だけ投稿できるようにする必要がある」など。
ありがとう!