继承和特定领域逻辑失去了独立性?

很抱歉,我确信我无法很好地表达自己。它是一个游戏系统:


abstract class GameType

{

    private $score;


    public __constructor($score)

    {

        $this->score = $score;

    }


    public abstract function getName();


    public function getScore()

    {

        return $this->score;

    }

}


final class Soccer extends GameType

{

    public function getName() :

    {

        return 'soccer';

    }

}


final class Basketball extends GameType

{

    public function getName() :

    {

        return 'basket ball';

    }

}


final class Hockey extends GameType

{

    public function getName() :

    {

        return 'hockey';

    }

}

这说明了 3 种游戏,每种都可以得分,都有不同的名称(我知道,getName()可以用常量替换,但我们暂时忘记它)


现在这似乎很好并且独立于系统,假设它是由框架 A 的团队开发的,并且可以传递到框架 B 开发的另一个系统


到目前为止。一个新的要求,如果有分数,请发送电子邮件:


abstract class GameType

{

    private $score;


    public __constructor($score)

    {

        $this->score = $score;

    }


    public abstract function getName();


    public abstract function notifyIfScored();


    public function getScore()

    {

        return $this->score;

    }

}


final class Soccer extends GameType

{

    public function getName() :

    {

        return 'soccer';

    }


    public abstract function notifyIfScored()

    {

        FRAMEWORK1::sendEmail('score 1');

    }

}


final class Basketball extends GameType

{

    public function getName() :

    {

        return 'basket ball';

    }


    public abstract function notifyIfScored()

    {

        FRAMEWORK1::sendEmail('score 2');

    }

}


final class Hockey extends GameType

{

    public function getName() :

    {

        return 'hockey';

    }


    public abstract function notifyIfScored()

    {

        FRAMEWORK1::sendEmail('score 3');

    }

}

发送电子邮件与 FRAMEWORK1 相关联,但即使我们可以将其作为依赖注入传递到外部,它仍然看起来该类必须做“更多”事情,并且通过这样做,它失去了任何框架的独立性。


慕斯709654
浏览 58回答 1
1回答

蓝山帝景

您的游戏类不应自行发送通知。相反,您应该有一个服务类来跟踪分数,然后发送电子邮件。服务类可能与框架无关,也可能与框架无关。
打开App,查看更多内容
随时随地看视频慕课网APP