0

多年来,我一直在(断断续续地)在办公室管理应用程序上写作。我需要重写它,因为代码已经变得不可维护,所以我将选择一个 PHP 框架并将业务逻辑重写为类。

现在我被这个基本问题困住了:我还需要返回结果吗?如果是,我如何捕获该结果?一些伪代码使我的问题更清楚:

function a( $1, $2, $3 ) {
 doThis( if ... return TRUE; if ... return FALSE; );
 if ( doThis() != TRUE ) { return; }
 doThat();
}

对比

class example {
 private $1;
 private $2;
 private $3;
 public function go() { $this->doThis(); $this->doThat(); }
 private function doThis(){}
 private function doThat(){}
}
$a = new example;
$a->go();

如果 doThis() 方法没有按预期执行,我该如何停止 go() 方法的执行?我认为如果某个属性设置为 false,我不应该返回布尔值并检查每个方法的内部吗?还是如果出现问题我只是抛出异常,如果一切正常则不做任何事情?

这是很基本的,我知道...

谢谢!

4

1 回答 1

1

异常是 for exceptional behaviour,所以不要仅仅因为你的代码没有处于首选状态就抛出异常。在编写 OOP 时,有些人仍然设法在使用面向对象的框架时编写过程,显然你想避免这种情况,一个简单的经验法则是不要编写God-objects

现在我猜你想要做的是调用两个应该按特定顺序调用的函数,有几种方法可以做到这一点,实际上归结为你有什么样的类。假设您有一个类型的对象,Person那么您可能想从其他地方对该人调用不同的方法:

$john = new Person();
$john->tryToWakeUp();
if($john->isAwake) {
    $john->brushTeeth();
} else {
    echo "John is still sleeping!";
}

另一方面,你可能有一个类型的对象,Engine它可能想要在内部为某些操作做一些事情,比如开始:

class Engine {
    public function start() {
        $this->checkFuel();
        if($this->hasFuel()) {
            try {
                  $this->initializeSomethingThatHasToDoWithEngineStartUp();                
            } catch (EngineException $ee) {
                  $this->engineState = BAD_ENGINE;
                  Logger::log("Engine did not start");
            }
        }
    }
}

我建议您在尝试转换所有业务规则之前阅读面向对象设计并尝试使用它,因为很可能在进行到一半时您会意识到您设计的一切都是错误的。面向对象设计并不容易,但它确实有意义编辑:(它应该有意义

于 2013-02-22T10:28:29.557 回答