很抱歉,我確信我無法很好地表達自己。它是一個游戲系統(tǒng):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()可以用常量替換,但我們暫時忘記它)現(xiàn)在這似乎很好并且獨立于系統(tǒng),假設它是由框架 A 的團隊開發(fā)的,并且可以傳遞到框架 B 開發(fā)的另一個系統(tǒng)到目前為止。一個新的要求,如果有分數(shù),請發(fā)送電子郵件: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'); }}發(fā)送電子郵件與 FRAMEWORK1 相關(guān)聯(lián),但即使我們可以將其作為依賴注入傳遞到外部,它仍然看起來該類必須做“更多”事情,并且通過這樣做,它失去了任何框架的獨立性。
1 回答

藍山帝景
TA貢獻1843條經(jīng)驗 獲得超7個贊
您的游戲類不應自行發(fā)送通知。相反,您應該有一個服務類來跟蹤分數(shù),然后發(fā)送電子郵件。服務類可能與框架無關(guān),也可能與框架無關(guān)。
- 1 回答
- 0 關(guān)注
- 88 瀏覽
添加回答
舉報
0/150
提交
取消