我正在浏览Orchard CMS项目的源代码,我注意到他们的一些构造函数从未验证所需的参数是否为空。起初,我认为这很奇怪。我问我的自我,“考虑到你说这个依赖是必需的,难道你不想检查你确实有吗?”由于意识到该项目使用Castle Windsor作为IoC容器,我后来认为,“当它试图找到具有该要求的对象的依赖关系时,容器将抛出异常。”所以我的问题是,我是否应该知道IoC容器会检查我吗?对于IoC容器,构造函数是否仍然检查参数是否为空?
或者是双重检查,因为在某种意义上,我坚持反向封装原则,声明:“我不知道我是如何获得这种依赖关系,但我真的需要一个!
这是一篇有趣的文章由马克塞曼关于这个问题:http://blog.ploeh.dk/2013/07/08/defensive-coding/ – Steven
谢谢你....我一直在变得安静的风扇马克。我一直说你应该在处理之前检查方法的要求,因为当你遇到问题时它会使故障排除更容易。 – Chris
说实话,现在我不再检查构造函数的参数了,因为容器连接的类。我知道我的容器(和大多数容器)决不允许在构造函数中注入null。因此,在这种情况下忽略检查是安全的,并使代码更具可读性,更易于维护。 – Steven