クラスの 1-* インスタンスを作成するループがあります。すべてのクラスは 1 つの抽象クラスの子クラスであるため、動作は異なりますが、応答はすべて同じです。このループは、作成、検証、実行の 3 回実行されます。ただし、クラス間のビジネス ロジックに遭遇しています。が作成された場合、実行できません。が作成された場合は、実行する必要があります。現在、これらのチェックはすべてループ自体にあり、複雑になり、元のアイデアよりも柔軟性が低下しています。
Q: ビジネス ロジックをクラスの検証関数に移動する方法はありますか?
class Parent{
abstract function validate();
abstract function run();
}
class A extends Parent{
function validate(){/*validation*/}
function run(){/*what A does*/}
}
class B extends Parent{
function isClassAthere(){}
function validate(){
// validation
if($this->isClassAthere()) return FALSE; // this is the one I want
}
function run(){/*what B does*/}
}
class C extends Parent{
function isClassBthere(){}
function validate(){
// validation
if($this->isClassBthere()) return TRUE;
}
function run(){/*what C does*/}
}
すべての呼び出し元
foreach( $classnames as $index=>$name ){
$instances[$index] = new $name();
if(!$instances[$index]->validate()) return FALSE;
// Business logic is here, I want to move it to validate()
}
foreach( $instances as $instance ){
$instance->run();
}