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

时间:2012-10-30 21:57:07

标签: c# .net design-patterns

我有以下代码按顺序执行,方法接着执行。

我加载请求,执行一些检查,例如检查此请求是否已存在响应,如果没有,我调用服务并接收保存到数据库的响应。

我一直在寻找一种可以在这种情况下使用的设计模式,我想在这里发布并获得一些想法。

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
        }

    }

5 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

http://www.oodesign.com/strategy-pattern.html

答案 2 :(得分:0)

似乎这些方法中的一些方法更有用。因此,不是让方法负责检查条件并执行其他操作,而是使用检查条件的函数,然后调用它的方法会根据结果执行某些操作。 (适用于方法SRP的种类......)

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() {}

答案 3 :(得分:0)

Command + Composite。

有些人认为在你的情况下使用if / then命令 - 在putRequest中 - 在一个Composite中是一种责任链。

答案 4 :(得分:0)

在选择模式时,您应该考虑应用程序的可伸缩性

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

将有两个州。

  1. 响应已经存在
  2. 需要处理新回复