0

私は、すべてのロジックが aspx ページの分離コードに配置されている Web フォームの世界から来ています。ASP.NET MVC に関する本を何冊か読んだり、ポッドキャストを聞いたり、Tekpub でビデオを見たりした後、少し違った方法でアプローチする時が来たと判断しました。

残念ながら、私はすでに立ち往生しています。

複数のWebサイトを追加できる、ある種の小さくて基本的なCMSを構築しようとしています。

コントローラーを薄くしておく必要があることはわかっているので、これを行うにはある種のサービス クラス (WebsiteService と呼びましょう) を使用する必要があると思います。私はデータ アクセスに Entity Framework を使用しており、ビューはすべて特定の ViewModel を使用しています。Web サイトを作成または編集すると、次の 4 つのことが起こるはずです。

  • 入力を検証する
  • Web サイトに関する情報をデータベースに追加します (編集の場合は情報を更新します)。
  • ディスク上にディレクトリを作成します(編集の場合はディレクトリの名前を変更する可能性があります)
  • ホスト ヘッダーを IIS Web サイトに追加します (古いホスト ヘッダーを削除し、編集の場合は新しいホスト ヘッダーを削除できます)。

基本的に、WebsiteService はより高度な検証を実行し、データベースに書き込み、ディレクトリを作成/編集し、ホスト ヘッダーを追加/削除し、成功したかどうかを示すために何かをコントローラーに返す必要があると思います。

このクラスはどのように見えるべきですか? 答えがわからない質問がいくつかあります。

  1. WebsiteService も CreateWebsite ViewModel を実際の Website クラスに変換する必要がありますか、それとも、WebsiteService が実際の Website オブジェクトを受け入れるようにするために何か他の方法でこれを行う必要がありますか?
  2. 基本的な入力検証は、ViewModel の Validation 属性を使用して行われます。より広範な検証 (「データベースにこのドメイン名の Web サイトは既に存在しますか?」) も行う必要があります。WebsiteService もこれを行う必要がありますか?
  3. 3 つの手順 (データベースへの保存、ディレクトリの作成、IIS へのホスト ヘッダーの追加) はすべて 1 つのパブリック メソッド ( WebsiteService.SaveWebsite(ViewModels.CreateWebsite website)) で実行する必要がありますか、それともコントローラーが呼び出す必要がある別のメソッドを提供する必要がありますか? (呼び出し順序が重要だと思うからではないと思います。)
4

1 に答える 1

1

これに対する答えは部分的に主観的で意見の問題ですが、私の考えは次のとおりです。

  1. できました。しかし、より良いアプローチは、AutoMapperを使用してこれを行うことです。データ駆動型 MVC アプリケーション用の「必須」のオープン ソース ツールの 1 つです。

  2. はい - ビューモデルの検証属性を介して入力検証を行う必要があります。より広範な/ドメイン/ビジネスの検証は、サービス内で行うことも、ドメイン モデル自体で行うこともできます。私は2番目のオプションを好みます(そして使用します)。私のドメイン モデルも私の POCO (EF で使用) ですが、ドメインに固有の追加のメソッド/プロパティがあります (ただし、データベースにはありません)。

  3. いいえ、これは主にテスト容易性/関心の分離のために、別の方法で行うべきだと思います。データベースの永続性、ファイルの書き込み、IIS の作業という 3 つのことが進行中です。私にとっては、3 つの異なるサービスである必要があります。「WebsiteService」にこれらのタスクを他のサービスに委任してもらいます。

于 2011-02-07T08:48:42.063 に答える