我有以下代码按顺序执行,方法接着执行。
我加载请求,执行一些检查,例如检查此请求是否已存在响应,如果没有,我调用服务并接收保存到数据库的响应。
我一直在寻找一种可以在这种情况下使用的设计模式,我想在这里发布并获得一些想法。
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
}
}
答案 0 :(得分:1)
模式用于解决一些问题。您当前的代码有什么问题?除了方法名称之外,我没有看到任何重复的代码。没有模式,它修复了方法命名问题。
是的,您的代码需要一些重构,但不需要模式。更好的类和方法命名是第一步。另外,我删除了字段isExist
。
public class Manager
{
public void PutRequest()
{
//Do Something
if (!CheckIfResponseExists()) // returns boolean value
LoadRequestFromDB()
CallService();
//Do Something
SaveResponse();
}
}
答案 1 :(得分:0)
检查名为Strategy的设计模式,它定义了所有支持算法通用的接口,每个具体策略实现算法
答案 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)
在选择模式时,您应该考虑应用程序的可伸缩性
您可以应用的模式之一是州模式
将有两个州。