3

私のasp.netコントローラーアクションは、FormCollectionをパラメーターとして受け取ります。

次に、自分のコレクションをループし、フォーム コレクションで値を検索します。

すべてのコードをビジネス ロジック レイヤーに移動し、次のようにアクションでビジネス ロジック レイヤーを呼び出すだけです。

SomeManager.Update(formCollection);

しかし、フォーム コレクションをビジネス ロジック層に渡すのに少しうんざりしています。

ここで本当に選択肢がありますか?他のアイデアはありますか?

またはそれは完全に問題ありませんか?

4

4 に答える 4

8

ビジネス ロジック層は実際にはドメイン モデルであり、ドメイン モデルはテクノロジにとらわれない方法で表現する必要があります。つまり、ASP.NET MVC、WPF、WCF、EF、NHibernate などの特定のテクノロジに依存しません。

ドメイン モデルをPOCO (Plain Old CLR Objects)として表現できるのが最善ですが、すでにお気づきのように、これにより FormCollections やその他の ASP.NET MVC 固有の型が除外されます。

Update メソッドを、ドメイン オブジェクトのリストを入力として受け取るメソッドとして表現できるとよいでしょう。

これは、更新メソッドに渡す前に、FormCollection を厳密に型指定されたドメイン オブジェクトに変換する必要があることを意味します。そのためにはマッパーが必要です。これには、独自のカスタム マッパーを作成するか、AutoMapperを使用できます。

于 2009-12-28T21:36:04.503 に答える
3

経験則として、ビジネス レイヤー以下の System.Web.XXX からは何も参照しないでください。この場合、カスタム モデル バインダーを使用して、FormCollection を使用しないようにすることができます。

モデル バインダーの作成の詳細については、この投稿を参照してください。

于 2009-12-28T21:36:24.040 に答える
0

なんらかの dto (データ転送オブジェクト) を作成し、データを入力してから渡してみませんか。少しきれいになります。

于 2009-12-28T21:36:27.733 に答える
0

FormCollection を受け取り、クラスのインスタンスまたは更新されたインスタンスを返すマッパー クラスを作成します。

ManagerMapper.Create(formcollection) または ManagerMapper.Update(SomeManager, formcollection)

于 2009-12-28T21:37:06.457 に答える