我有一个场景,其中我将一个名为“request”的数据对象传递到一个服务中,该服务本身必须根据请求中的数据创建多个不同的“处理器”。
每个处理器本身可以是多种不同类型之一。因此,例如,一个粗糙且丑陋的实现可能如下所示:
我正在寻找一种可扩展的模式,可以隐藏决定服务需要创建哪种处理器类型的糟糕逻辑,使代码更加简洁和易于维护,比上面那段丑陋的代码更好一些。我知道工厂方法,但仅靠这些是不够的。欢迎提供建议。
每个处理器本身可以是多种不同类型之一。因此,例如,一个粗糙且丑陋的实现可能如下所示:
public Collection<IProcessor> UglyCreationalMethod(Request request)
{
var processors = new Collection<IProcessor>();
if(request.Type == RequestType.SomeVal)
{
if(request.Id > 1000)
{
processors.Add(new ProcessLargeRequest(request));
}
else
{
processors.Add(new ProcessSmallRequest(request));
}
}
else (request.Type == RequestType.SomeOtherVal)
{
if(request.Source == RequestSource.User)
{
processors.Add(new ProcessUserRequest(request));
}
else
{
processors.Add(new ProcessCorpRequest(request));
}
}
if(request.SomeProp == "blah")
processors.Add(new ProcessBlahRequest(request));
// ... etc ad infinitum :)
return processors;
}
我正在寻找一种可扩展的模式,可以隐藏决定服务需要创建哪种处理器类型的糟糕逻辑,使代码更加简洁和易于维护,比上面那段丑陋的代码更好一些。我知道工厂方法,但仅靠这些是不够的。欢迎提供建议。