0

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

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

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

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
        }

    }
4

5 回答 5

1

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

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

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

        CallService(); 
        //Do Something
        SaveResponse();
   }
}
于 2012-10-30T21:59:23.713 回答
0

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

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

于 2012-10-30T22:02:26.363 回答
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() {}
于 2012-10-30T22:06:15.410 回答
0

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

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

会有两种状态。

  1. 响应已经存在
  2. 需要处理新的响应
于 2012-10-31T09:11:52.203 回答
0

命令+复合。

有些人认为在复合中使用 if/then 命令(在您的情况下是 putRequest)是一种责任链。

于 2012-10-31T07:59:53.260 回答