是否有任何我的POCO應該參與DI的場景。這是一種代碼味道嗎?持久對象和依賴注入
3
A
回答
1
我認爲代碼異味是指示某些東西可能是錯的,但不一定是錯的。我不知道這是上升到這個水平。
想象一下,您有一個Customer POCO和一個短期的CustomerValidator對象,該對象在單個客戶上運行。我將xtor注入用作我認爲是關鍵依賴的東西,而CustomerValidator肯定會對客戶產生嚴重的依賴性 - 沒有它就沒有任何意義。
因此,根據我的估計,這是一個場景(儘管這是一個人爲設計的場景),這很好。我會說,與POCO相比,你的對象的生命週期必須做得更多,以及你的對象如何依賴POCO。
但是,要清楚的是,當我編碼時,這對我來說不一定是常見的情況。我只是不知道我會認爲它是一種「氣味」。也許如果它發生了很多......我的兩分錢,無論如何。
編輯:例如:
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關係的一個驗證器對象。也就是說,驗證器將POCO封裝爲其狀態的一部分,並對其執行一些(可以承擔的操作)操作。
如果沒有POCO,驗證器對象就沒有意義,所以有理由認爲您會以強制客戶端提供POCO(即構造器依賴注入)的方式編寫代碼。忽略這個例子的人爲本質,我不認爲這是一種代碼味道。
你有一個依賴項,你在這裏注入它。如果稍後,您定義了客戶的繼承者,那麼驗證器仍然會對他們進行處理。您可以通過替換您的POCO的測試版來測試您的驗證器。因此,在這種情況下,DI的各種動機就像在注入面向服務的類時一樣。所以,我個人認爲沒有理由不注射。
相關問題
- 1. 依賴注入Date對象
- 2. 正確構建和破壞注入器依賴注入對象
- 3. IValidatableObject和依賴注入支持
- 4. Spring依賴注入對象池
- 5. 依賴注入檢索SecurityContext對象
- 6. 注入相互依賴的對象 - roboguice
- 7. ZF2依賴注入吸熱體對象
- 8. Spring Java對象依賴注入
- 9. 注入一個對象內的依賴
- 10. 依賴注入/配置對象
- 11. 依賴注入 - 傳遞對象
- 12. 依賴注入與NHibernate對象
- 13. 依賴注入OR配置對象?
- 14. 注入新對象VS使用依賴注入時注入現有對象?
- 15. Symfony2依賴注入是否支持對象生活?
- 16. 在依賴注入中dynamiclly初始化依賴項對象?
- 17. 依賴注入和依賴不使用
- 18. 你可以在持久實體中使用依賴注入嗎?
- 19. WCF依賴注入和抽象工廠
- 20. 應對依賴注入
- 21. 保護條款和依賴注入空對象模式和C#
- 22. 依賴注入
- 23. 依賴注入
- 24. 依賴注入
- 25. 依賴注入
- 26. 依賴注入
- 27. 依賴注入
- 28. Autofac:注入注入對象(解決dificult依賴關係)
- 29. PHP依賴注入 - 調用注入對象的方法
- 30. 角2依賴注入 - 注入對象independantly構造
可能的重複[爲什麼不使用IoC容器來解決實體/業務對象的依賴關係?](http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to- resolve-dependencies-for-entities-business-objec) – Steven 2012-03-28 19:12:11