class CustomService(IProcessor processor) : ICustomService
类CustomService
具有将被注入的依赖项。 IProcessor
有多种实现方式。应该使用哪种实现由存储在当前用户的数据库中的设置确定。
首先,我考虑实现一个IHandlerSelector
,它将从数据库中检索设置并确定要使用的实现。但是对于数据库中缺少设置等情况存在业务逻辑....由于存在业务逻辑,我不确定将其放在IHandlerSelector
中是否正确。
我考虑创建另一个名为TopService
的类:
class TopService(ISettingsProvider provider, IProcessorFactory procFactory, ICustomServiceFactory serviceFactory)
TopService
使用两个类型的工厂。它将使用ISettingsProvider
从数据库中检索设置,并使用IProcessorFactory
来解析相应的IProcessor
。得到正确的IProcessor
后,我会使用ICustomServiceFactory
工厂来解析CustomService
。
然而,这对我来说似乎有点不对劲。有更好的方法吗?
答案 0 :(得分:0)
为什么不将IProcessorFactory
传递到CustomerService
课程?这仍然会将您的CustomerService
课程与IProcessorFactory
的实施隔离开来。这样,如果您的业务逻辑选择了将来更改的IProcessor
,您可以创建一个新的IProcessorFactory
。
我会想象它是这样的:
public interface IProcessorFactory {
IProcessor GetProcessor();
IProcessor GetProcessor(string processorType);
}
然后在CustomerService
课程中,可以根据是否为客户提供设置来调用正确的GetProcessor()
方法。