【发布时间】:2015-08-03 13:38:24
【问题描述】:
我在一个项目中工作,该项目从不同来源获取外部数据,例如数据库、3 个外部 Web api、Web 配置。 为了避免紧密耦合,在我的类构造函数中使用并传递了一些接口,例如:
public Dog(IDataAccess dataAccess, IConverter converter, IConfigAccess configAccess,
ITimezoneAccess timezoneAccess)
public Cat(IDataAccess dataAccess, IConverter converter, IConfigAccess configAccess,
ITimezoneAccess timezoneAccess)
public Duck(IDataAccess dataAccess, IConverter converter, IConfigAccess configAccess,
ITimezoneAccess timezoneAccess)
它有助于我们进行单元测试,因为我们创建了这些接口的模拟实现。
在开发代码的时候,所有类之间都有一些通用的功能,比如日期时间操作、定值方法等。我决定创建一些静态类来把这个功能划分到具体的类中,比如DatetimeHelper、FixedCalculationsHelper、StringHandlingHelper等.
我得到了避免使用这些静态类的建议,并将它们转换为带有接口的策略,并将它们作为其他外部数据访问接口传递到构造函数中。
-
当我应用这个时,我的类的构造函数会有很多接口参数,例如:
public Dog(IDataAccess dataAccess, IConverter 转换器, IConfigAccess configAccess, ITimezoneAccess timezoneAccess, IStringHandling stringHandler, IDatetimeHelper datetimeHelper ...等...
处理这种情况的最优雅/最好的方法是什么? (不确定这里是否使用了某些技术,例如容器或类似的东西)
- 为什么最好将此静态类转换为接口/实现策略(即使此方法是静态的,例如 CalculateArea(int value1, int value2))?
非常欢迎任何评论或解释。提前致谢。
【问题讨论】:
-
您正在寻找Dependency Injection。有许多框架可以帮助您。
-
告诉他使用 DI 并不能回答他的两个问题
-
你可以改用setter注入。
-
使用 IOC 容器怎么样?
标签: c# interface dependency-injection strategy-pattern