Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设计问题:';通用应用/流程';对于多个客户端,结果将充满';但是';s';_C#_Asp.net_Design Patterns - Fatal编程技术网

C# 设计问题:';通用应用/流程';对于多个客户端,结果将充满';但是';s';

C# 设计问题:';通用应用/流程';对于多个客户端,结果将充满';但是';s';,c#,asp.net,design-patterns,C#,Asp.net,Design Patterns,我将为我的客户端创建一个应用程序。 他(我的客户)的多个客户将登录到该应用程序并执行相同的操作。 因此,从这个角度来看,我们有一个“通用应用”:编写一次,满足每个客户的需求 但是,在编写第一行代码之前,我们当然有第一个例外:当客户端A执行操作A时,您必须执行与客户端B、C和D相同的操作,但是 当然,我们可以等待第一个想法的“所有人的一个流程”的更多此类修改 没问题,不能预见一切,源代码是灵活的 但是,我预见到我的源代码包含各种if语句: if (client == "a") { SetEnd

我将为我的客户端创建一个应用程序。 他(我的客户)的多个客户将登录到该应用程序并执行相同的操作。 因此,从这个角度来看,我们有一个“通用应用”:编写一次,满足每个客户的需求

但是,在编写第一行代码之前,我们当然有第一个例外:当客户端A执行操作A时,您必须执行与客户端B、C和D相同的操作,但是

当然,我们可以等待第一个想法的“所有人的一个流程”的更多此类修改

没问题,不能预见一切,源代码是灵活的

但是,我预见到我的源代码包含各种if语句:

if (client == "a")
{
  SetEndDate(+1);
}

else if (client == "b")
{
  SetEndDate(+10);
}
else //no enddate modification needed for other clients

if (client == "d" || client == "E" )
{
  DoExtraCheck1();
}
else if (client = "b")
{
  if ( DoExtraCheck1())
   {
       DoExtraCheck2();
   }
}
else //no checking needed for other clients
我开始害怕了

有什么好的优雅的解决方案可以简化这一过程



当然,下一个要解决的问题是用户界面在客户端之间是否也会发生变化,但这就是V2问题:)

处理这些问题的一个好方法是。您可以为所有客户机实现默认策略,并为具有特殊行为的客户机将其子类化。源代码中的
if
s将由多态性处理

不改变接口的额外处理(例如检查不变量或类似的东西)可以使用实现

两者之间的区别在于,decorator模式旨在扩展功能,通过strategy模式,您可以实际更改实现

这两种解决方案都假设您可以为所有客户端定义一个接口,因此可以利用多态性