是否有任何我的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. 正確構建和破壞注入器依賴注入對象
- 2. Spring Java對象依賴注入
- 3. 依賴注入OR配置對象?
- 4. ZF2依賴注入吸熱體對象
- 5. Spring依賴注入對象池
- 6. 依賴注入與NHibernate對象
- 7. 注入一個對象內的依賴
- 8. 注入相互依賴的對象 - roboguice
- 9. 依賴注入 - 傳遞對象
- 10. 你可以在持久實體中使用依賴注入嗎?
- 11. 應對依賴注入
- 12. 依賴注入
- 13. 依賴注入
- 14. 依賴注入
- 15. 依賴注入
- 16. 依賴注入
- 17. 依賴注入
- 18. 角2依賴注入 - 注入對象independantly構造
- 19. Pimcore和依賴注入
- 20. 依賴注入和測試
- 21. Grails @DelegateAsync和依賴注入
- 22. IoC和依賴注入
- 23. 依賴注入和Moqing
- 24. MVVM和依賴注入
- 25. 依賴注入和JavaScriptConverter.Deserialize
- 26. 依賴注入和工廠
- 27. WCF和依賴注入
- 28. 依賴注入和.NET
- 29. WCF和Unity - 依賴注入
- 30. 使用依賴注入來注入依賴注入器
可能的重複[爲什麼不使用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