Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 我应该使用哪种设计模式?_C#_.net_Design Patterns - Fatal编程技术网

C# 我应该使用哪种设计模式?

C# 我应该使用哪种设计模式?,c#,.net,design-patterns,C#,.net,Design Patterns,我有下面的代码,它按顺序执行,方法一个接一个 我加载请求,执行一些检查,比如检查是否已经存在针对该请求的响应,如果不存在,我调用服务并接收保存到DB的响应 我正在寻找一种设计模式,我可以在这种情况下使用,我想张贴在这里,并得到一些想法 public class Manager { public void PutRequest() { //Do Something if (loadRequest())

我有下面的代码,它按顺序执行,方法一个接一个

我加载请求,执行一些检查,比如检查是否已经存在针对该请求的响应,如果不存在,我调用服务并接收保存到DB的响应

我正在寻找一种设计模式,我可以在这种情况下使用,我想张贴在这里,并得到一些想法

public class Manager
    {

        public void PutRequest()
        {
            //Do Something

            if (loadRequest())
            {
                  callService(); 

                  //Do Something
                  saveResponse();
            }

        }

        private bool loadRequest()
        {            
             bool isExist = checkIfResponseExists();

             if (!isExist)
             {
              // If false, load request from DB
             } 

             return !isExist;

        }

        private bool checkIfDataExists()
        {
            //Check if a response already exists in the DB for this request
        }

        private void callService()
        {
            //Call the service and receive the response
        }    

        private void saveResponse()
        {
            //Store the response in the DB
        }

    }

模式用于解决一些问题。您当前的代码有什么问题?除了方法名之外,我没有看到任何重复的代码。没有解决方法命名问题的模式

是的,您的代码需要一些重构,但不需要对模式进行重构。更好的类和方法命名是第一步。此外,我还删除了字段
isExist

public class Manager
{
   public void PutRequest()
   {
       //Do Something
       if (!CheckIfResponseExists()) // returns boolean value
            LoadRequestFromDB()

        CallService(); 
        //Do Something
        SaveResponse();
   }
}

检查名为Strategy的设计模式,它定义了所有受支持算法的通用接口,每个具体策略实现一个算法


将其中几个方法作为函数似乎更有用。因此,我们没有一个负责检查条件和执行其他操作的方法,而是有一个检查条件的函数,然后调用它的方法根据结果执行一些操作。(应用于方法的种类…)

命令+复合


有些人认为使用I/Stand命令在你的情况下是在PATREST中-在一个复合的一种责任链中。

< P>在选择一个模式时,你应该考虑应用程序的可扩展性

您可以应用的模式之一是状态模式

将有两个州

  • 已经有了回应
  • 需要处理新的响应

  • 既然它调用了
    method3()
    ,为什么要使用
    method2()
    ?立即调用
    method3()
    怎么样等待不是所有这些属性吗如果method3返回false,则PMethod2从DB加载请求。这是一个小规模的代码版本,有更多的方法和更多的代码。我只是想澄清我所说的代码按顺序执行的意思。在考虑模式之前,先用有意义的名称命名方法。这段代码完全不可读。并且每一行代码都不能参与一个模式。你只需要有一系列的操作,除了按顺序执行它们,没什么可做的。哦,好吧,我的印象是,
    void
    是必需的。。。呃,等一下<代码>无效在我发布评论时不在,我保证!;)我用一些有意义的东西替换了方法名称,但我不是在问这个确切的代码,我的问题是“对于像上面那样顺序执行的代码,最好使用什么模式?”
    public void DoAllTheThings!() // Oops, Ruby syntax creeping in :P
    {
       if(!WeCanDoIt())
       {
         MakeItSo(); // So that we can do it...
       }
    
       NowWeCanDoAllTheThings();
    }
    
    private bool WeCanDoIt() {}
    private void MakeItSo() {}
    private void NowWeCanDoAllTheThings() {}