私は、すべてのロジックが aspx ページの分離コードに配置されている Web フォームの世界から来ています。ASP.NET MVC に関する本を何冊か読んだり、ポッドキャストを聞いたり、Tekpub でビデオを見たりした後、少し違った方法でアプローチする時が来たと判断しました。
残念ながら、私はすでに立ち往生しています。
複数のWebサイトを追加できる、ある種の小さくて基本的なCMSを構築しようとしています。
コントローラーを薄くしておく必要があることはわかっているので、これを行うにはある種のサービス クラス (WebsiteService と呼びましょう) を使用する必要があると思います。私はデータ アクセスに Entity Framework を使用しており、ビューはすべて特定の ViewModel を使用しています。Web サイトを作成または編集すると、次の 4 つのことが起こるはずです。
- 入力を検証する
- Web サイトに関する情報をデータベースに追加します (編集の場合は情報を更新します)。
- ディスク上にディレクトリを作成します(編集の場合はディレクトリの名前を変更する可能性があります)
- ホスト ヘッダーを IIS Web サイトに追加します (古いホスト ヘッダーを削除し、編集の場合は新しいホスト ヘッダーを削除できます)。
基本的に、WebsiteService はより高度な検証を実行し、データベースに書き込み、ディレクトリを作成/編集し、ホスト ヘッダーを追加/削除し、成功したかどうかを示すために何かをコントローラーに返す必要があると思います。
このクラスはどのように見えるべきですか? 答えがわからない質問がいくつかあります。
- WebsiteService も CreateWebsite ViewModel を実際の Website クラスに変換する必要がありますか、それとも、WebsiteService が実際の Website オブジェクトを受け入れるようにするために何か他の方法でこれを行う必要がありますか?
- 基本的な入力検証は、ViewModel の Validation 属性を使用して行われます。より広範な検証 (「データベースにこのドメイン名の Web サイトは既に存在しますか?」) も行う必要があります。WebsiteService もこれを行う必要がありますか?
- 3 つの手順 (データベースへの保存、ディレクトリの作成、IIS へのホスト ヘッダーの追加) はすべて 1 つのパブリック メソッド (
WebsiteService.SaveWebsite(ViewModels.CreateWebsite website)
) で実行する必要がありますか、それともコントローラーが呼び出す必要がある別のメソッドを提供する必要がありますか? (呼び出し順序が重要だと思うからではないと思います。)