私のPOCOがDIに参加するシナリオはありますか?それはコードのにおいですか?永続オブジェクトと従属注入
答えて
コードの匂いは、何かが間違っているかもしれないが必ずしも間違っているとは限りません。私はこれがそのレベルに上昇することは知らない。
顧客POCOと短期間のCustomerValidatorオブジェクトが1人の顧客で操作されたとします。私は重要な依存関係としてxtorインジェクションを使用しています。そして、CustomerValidatorは確かにCustomerに重大な依存関係を取っています。それがなければ理にかなっていません。
私の見積もりでは、これはうまくいくシナリオです。私はそれがPOCOと比較してあなたのオブジェクトの生涯で多くをしなければならないと言うだけでなく、あなたのオブジェクトがPOCOにどれほど批判的に依存しているのでしょうか。
私がコードするとき、これは必ずしも一般的なケースではありません。私はそれを「匂い」と呼ぶことは知らない。おそらくそれがたくさん起こっているなら...とにかく私の2セント。
編集:例えば:
ここpublic class Customer
{
public virtual string LastName { get; set; }
public virtual string FirstName { get; set; }
public virtual string Ssn { get; set; }
}
public class CustomerValidator
{
private readonly Customer _customer;
public CustomerValidator(Customer customer)
{
_customer = customer;
}
public void FixIfNotValid()
{
if (!IsValid())
{
_customer.Ssn = "123456789";
_customer.LastName = "Smith";
}
}
public bool IsValid()
{
return !string.IsNullOrEmpty(_customer.Ssn) && !string.IsNullOrEmpty(_customer.LastName);
}
}
、あなたはPOCO(顧客)とPOCOとPOCOの関係ごとに1つずつ持っているバリデータオブジェクトを持っています。つまり、バリデーターはPOCOをその状態の一部としてカプセル化し、その上で(確かに意図的に)操作を実行します。
POCOがないと、バリデータオブジェクトは意味をなさないので、クライアントにPOCO(コンストラクタ依存性注入)を強制的に与えるような方法でコードを書くことになります。この例の人為的な性質を無視して、これをコードの匂いとは考えません。
依存関係があり、ここに注入しています。後で Customerの継承を定義した場合、バリデータは引き続き作業します。あなたはあなたのPOCOのテスト二倍で代用することによってバリデータをテストすることができます。したがって、DIのさまざまな動機は、サービス指向のクラスを注入する場合と同様に適用されます。だから、個人的に、私は注射しない理由はないと思う。
- 1. 従属性注入の安全な列挙型
- 2. CoreDataで同じタイプの永続オブジェクトと非永続オブジェクトを持つ
- 3. Hibernateオブジェクトの永続属性をデタッチする方法
- 4. 永遠に似たC++オブジェクト永続ライブラリ
- 5. Json.NETとNHibernate - 永続オブジェクトの逆シリアル化
- 6. 永続オブジェクトの編集
- 7. オブジェクトの永続化を
- 8. 教義2永続オブジェクト
- 9. NonUniqueObjectException永続オブジェクトの場合
- 10. Silverlightオブジェクトの永続性
- 11. Ninject WCF:属性注入
- 12. 春の注入とオブジェクトのインスタンス化
- 13. PHPと永続的接続
- 14. 従属としてのボレー
- 15. Androidオブジェクトの永続性:Ektorp and CouchDB
- 16. 永続オブジェクトの命名規則
- 17. ASP.NETでのオブジェクトの永続性(ポストバック間)
- 18. Symfony2:永続オブジェクトのIDを取得
- 19. Pythonでのオブジェクトの永続性
- 20. 従属セレクトボックス
- 21. 従属ブレークポイント
- 22. Backbone.jsモデルの従属属性
- 23. Excelの従属リスト
- 24. 従属選択フォーム
- 25. VB.NETの従属型
- 26. mysql永続接続
- 27. 属性でAutofac属性の注入に失敗しました
- 28. Windowsワークフロー:永続性とポーリング
- 29. Builderのパターンと永続性
- 30. Blackberryオブジェクトハンドルと永続オブジェクトハンドル?
[IoCコンテナを使用してエンティティ/ビジネスオブジェクトの依存関係を解決してみませんか?](http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to- resolve-dependencies-for-entities-business-objec) – Steven