7
我应该使用依赖注入还是静态工厂?
在设计系统时,我经常面临使其他模块使用大量模块(日志记录,数据库访问等)的问题。问题是,如何将这些组件提供给其他组件。似乎有两个答案可能是依赖注入或使用工厂模式。但是,两者似乎都错了: 工厂使测试变得痛苦,并且不允许轻易交换实现。它们也不会使依赖关系变得明显(例如,您正在检查一个方法,而忽略了它调用的方法会调用使用数据库的方法的事实)。 Dependecy注入使构造函数的参数列表大量膨胀,并且在代码的所有部分涂上了污点。典型情况是一半以上类的构造函数如下所示(....., LoggingProvider l, DbSessionProvider db, ExceptionFactory d, UserSession sess, Descriptions d) 这是我遇到的一个典型情况:我有异常类,这些异常类使用从用户数据库中加载的错误描述,并使用在用户会话对象中具有用户语言设置参数的查询。因此,要创建一个新的异常,我需要一个描述,它需要一个数据库会话和一个用户会话。因此,我注定要在所有方法中拖动所有这些对象,以防万一我可能需要引发异常。 我该如何解决这个问题?