是否有任何我的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