8

どれくらい悪い?私は数え切れないほどの記事を読みましたが、これまで動作を伴う抽象的な DataContracts を作成したことはありませんでしたが、そうすることで、サブクラスの実装を決定するためにどこにでもファクトリを作成できなくなるという問題が解決されるようです。私の質問は、データ コントラクトに動作を追加することを決定した場合、罰せられるのでしょうか? もちろん、それらは消費できず、リポジトリ呼び出しを呼び出す前にそのサブクラス タイプに固有の特定の操作を実行するために存在し、データは永続化されます。サブクラスごとに「マネージャー」クラスを作成できますが、それでは工場に戻り、よりポリモーフィックなアプローチを試みています。前もって感謝します。

4

4 に答える 4

8

従来の方法でデータ コントラクト (MyDataContract) を作成し、データ フィールドだけを作成し、そこから動作クラスを派生させることができないのはなぜでしょうか?

public class BehaviorialClass : MyDataContract
{
.....
}

そうすれば、懸念事項がきれいに分離され、データ コントラクトが処理できない動作によって「汚染」されることはありません。

マルク

于 2009-07-13T18:28:00.583 に答える
6

DataContracts に動作を直接配置するための適切な妥協点は、Contracts と同じアセンブリまたは完全に異なるアセンブリの拡張メソッドとして動作を定義することです。必要に応じて、拡張メソッドをコントラクトとは別の名前空間に配置して、データと動作をさらに分離することができます。

そうすれば、コントラクトはクリーンに保たれますが、同時に、コントラクトの .NET コンシューマーは、それらの DataContract に関連する追加機能を簡単にインポートできます。

于 2009-07-13T18:35:11.787 に答える