この質問はかなり主観的なようですので、ここに投稿します。
ASP.NET MVCを使用して独自のバージョンのStackoverflowを作成しているとしましょう。そのため、Question
、Answer
、User
などのクラスがあります。 、エンティティフレームワークを使用することにしました。したがって、上記のすべてのクラスにはナビゲーションプロパティがあります:Question
はそのAnswer
sを知っており、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 /他に何がgoodを使用するかを決定するために何を考慮すべきか?」)
また、Stackoverflowの非常に簡略化されたクローンを検討していることにも注意してください。
また、最初の3つのポイントが変更された場合の考えを表明することもできます-「顧客は、10000人の同時ユーザーを許可するサービスを望んでいる」または「すべてのユーザーが15分に1回だけ投稿できるようにする必要がある」など。
ありがとう!
私はMVCをあまり使用していませんが、MVVMを使用して多くの作業をしてきました。
Question
、Answer
、およびUser
はすべてデータオブジェクトです。彼らがお互いを知ることは問題ありませんが、ビュー、コントローラ、ビューモデルなど、データオブジェクトレイヤの外側にあるものは何も認識してはなりません。
理想的な世界では、ビューはモデルのみを参照します。彼らはコントローラーを知っているかもしれませんが、直接参照する必要はありません。 ViewModelは他のモデルのみを認識します。コントローラは、モデルとビューモデルを認識しています。ビューにViewModelsまたはModelsを提供しますが、ビューはまったく気にしません。
したがって、オブジェクトは次のようになります。
[〜#〜] m [〜#〜]オデルには、ModelsとViewModelsの2種類があります。
[〜#〜] c [〜#〜]オンローラーにはビジネスロジックが含まれています。これらは、データアクセス呼び出しを制御し、ビューに渡すモデル/ビューモデルを作成し、アクセス許可などの高度なビジネスロジックなどを制御します。基本的に、コードレイヤー全体を制御します。
[〜#〜] v [〜#〜] iewsは、ユーザーに使いやすいインターフェイスを提供するために使用されます。それらはViewModelまたはModelのいずれかを受け入れ、ユーザーにとって見栄えのよい方法で表示します。