Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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# 如果每个switch语句中都有复杂的业务规则,则替换switch语句_C#_Design Patterns - Fatal编程技术网

C# 如果每个switch语句中都有复杂的业务规则,则替换switch语句

C# 如果每个switch语句中都有复杂的业务规则,则替换switch语句,c#,design-patterns,C#,Design Patterns,我必须根据多个输入变量计算价格 public class Model { public int Account { get; set; } public long Related{ get; set; } public int TransactionType { get; set; } public string detail{ get; set; } public int PlanId { get; set; } } 第一个开关以Trans

我必须根据多个输入变量计算价格

public class Model
{
    public int Account { get; set; }
    public long Related{ get; set; }
    public int TransactionType { get; set; }
    public string detail{ get; set; }
    public int PlanId { get; set; }      
}
第一个开关以
TransactionType
开头。基于
TransactionType
我需要使用
帐户、PlanId、相关的
字段从数据库获取更多信息,以获取更多信息和一些可配置信息。还有更多基于这些数据库值的条件。当然,不同的
TransactionType

现在我可以使用

switch (TransactionType)
{
   case 1:
     //Check Related value and get more information from database
     //Apply buisness rule
     //Check PlanId value and get more information from database
     //Apply buisness rule
     //Get final value
     break;
   case 2
     //Check Related value and get more information from database
     //Apply buisness rule
     //Check PlanId value and get more information from database
     //Apply buisness rule
     //Get final value
     break;
   default:
     break;
}

请帮助我如何避免这些switch语句

无法100%确定您要做什么,但您是否考虑过创建一个事务对象来处理此问题?您可以重载构造函数,或者简单地将数据传递给它,然后让它处理所有排序和收集,并返回您需要的任何内容。在这一点上,您只需要一个if语句来决定调用哪个构造函数,或者如果您只是传递收集的所有数据,则根本不需要

例如:如果您创建了一个包含您提到的所有变量的构造函数,那么您可以在对象初始化时对数据进行排序、收集规则、检索数据库信息。这还允许您在创建对象之后,如果需要,也可以选择操纵该转换


我不确定我是否在正确的轨道上了解你在寻找什么,但这是我读了你的问题后第一个想到的问题。

将开关更改为if?使用不同的方法?使用字典?有多种方法可以避免switch语句,这对我们来说太宽泛了,无法以任何有意义的方式帮助您具有相同帐户的人已经提出了相同的问题。。。你可能想先讨论一下这一点,以避免将来出现这种重复的帖子。