【发布时间】:2016-05-12 03:44:12
【问题描述】:
考虑下面的代码。我想根据binding 的type 创建一个service。我已经为它创建了一个switch 案例,但我对这种方法不满意,我想避免 switch 声明以实现未来的可扩展性。请提出更好的模式或设计来做到这一点。
public static object CreateBinding(string binding, object service)
{
switch (binding)
{
case "ServiceA":
ChannelFactory<IServiceA> ServiceFactoryA = new ChannelFactory<IServiceA> (binding);
service = ServiceFactoryA.CreateChannel();
break;
case "ServiceB":
ChannelFactory<IServiceB> ServiceFactoryB = new ChannelFactory<IServiceB> (binding);
service = ServiceFactoryB.CreateChannel();
break;
default:
ChannelFactory<IServiceC> ServiceFactoryC = new ChannelFactory<IServiceC> (binding);
service = ServiceFactoryC.CreateChannel();
break;
}
OpenChannel(service);
return service;
}
【问题讨论】:
-
有很多关于重构
switch语句的问题/文章。展示你已经尝试过的东西是个好主意。确实很高兴为您的案例获得量身定制的代码,但这并不是 SO 的真正目标。 -
这是一个有据可查的重构模式的常见问题:refactoring.com/catalog/replaceConditionalWithPolymorphism.html
标签: c# design-patterns coding-style