我必须计算出一个结果,这个结果取决于从异步调用中获得的许多模型。这些异步调用执行网络调用或UI中断(提示用户要求他/她选择某些内容)。
我的第一次尝试只是以递归方式调用一个丑陋的if / else嵌套,看起来像这样:
public void getResult() {
if(mModelA == null) {
getModelA();
} else if(mModelB == null) {
getModelB(mModelA.someData);
} else if(mModelB.value == -1) {
askUserAboutValue();
} else if(mModelB.value == 5) {
getModelC();
} else if(mModelB.value == 3) {
getModelD();
} else if(...) {
....
}
}
方法getModelX和askUserAboutValue执行异步任务,当它们完成时,它们会编写一些全局变量并在其回调中调用getResult()。
我想知道是否有一种模式可以简化这种意大利面条代码,更重要的是简单地进行单元测试。
我认为在更简单的方法中隔离每个检查(例如:checkModelA())可能有所帮助,但它可能存在更好的东西。
顺便说一句,这是在Android应用程序的Activity中执行的,所以我只能将所有这些代码只包含在一个类中。
答案 0 :(得分:0)
也许一个开关会更好用吗?或者只使用一个自定义方法,该方法接受mModelB.value返回的Integer?注意“Integer”而不是int来检查该null。
另一个建议是使用多态,也许创建一个名为“getModel(mModelB.value)”的方法。
答案 1 :(得分:0)
Switch Case / If-Else问题通常可以解决设计不良的问题。
看起来你应该对你的ModelB进行SubClass,使得5,-1和3的值是不同的ChildClass,它们都与作为ModelB的父类有关。
但是从每个If子句中调用的函数来看,似乎-1不是SubClass而是错误。感觉就像在单个函数中,您尝试识别应该使用的正确类并管理1个错误情况。应该在名为。
的函数内处理错误情况所以在简历中,这是一团糟吗?我很乐意帮助你,但你必须给我更多关于这些"价值"那些"模型"以及它们如何相互作用或相互作用,以便我可以尝试提出更好的设计。你的问题不只是在这个If / Else函数上,而是更大。