1

ドメインモデルでエンティティクラスを表すためにインターフェースを使用しています。LinqToSqlを使用することにより、これらの具体的な実装があります。サービスレイヤーが新しいエンティティをインスタンス化するために使用する各LinqToSqlクラスにファクトリメソッドを追加しました(コントローラーのDataBind属性がインスタンス化するのとは対照的です)。

MonoRailのデフォルトのDataBinder実装は、インターフェースとして定義されているプロパティを無視します。

理想的には、MonoRailでデータレイヤークラスをインスタンス化する必要はありません。インターフェイスの要点は、これらの懸念を分離することです。

また、LinqToSql以外の具象クラスの別のセットを作成する必要はありません。このクラスの唯一の仕事は、レイヤー間での変換です。

ここで本当に長い一日の終わりです。誰かが慈悲を持って、私たち自身の実装でオーバーロードする必要があるIDataBinderの部分を指摘したり、私たちが試みる可能性のある他のアプローチを示唆したりできますか?;-)

4

2 に答える 2

3

IParameterBinder を見ているは​​ずです。この件について私が書いた投稿を見てください

于 2009-02-06T19:41:57.867 に答える
0

ケンが指摘したように、あなたのアイデアはカスタムIParameterBinderで実装できます。

解決策は、IOCを使用することです。

  • そのインターフェースからフォームの具体的なインスタンスを解決します
  • 次に、IDataBinderを使用して、インスタンスをリクエストパラメータにバインドします

もう1つは、IDictionaryAdapterを使用することです。

  • インターフェイスのdtoプロキシを生成します
  • 次に、IDataBinderを使用して、dtoプロキシインスタンスをリクエストパラメータにバインドします

注意:インターフェースが次の場合、2番目のオプションは機能しません:

  • 公開されていません(ハム)
  • メソッドがあります
  • またはイベント
  • または読み取り専用プロパティ
  • またはsetonlyプロパティ

最後に、コントローラーのシグネチャで具象クラスを公開する際の問題は何かわかりません。

私自身、アプリケーション層サービスで定義されたインターフェースを実装するコントローラーで具体的な形式を使用しています。これにより、懸念事項を両側で分離することができます。

  • コントローラ側は、フォーム/コマンドのHttpマッピングと第1レベルのデータ検証です
  • アプリケーション層サービスは、フォーム/コマンドのビジネス検証と処理です
于 2010-01-24T04:07:51.677 に答える