Я нахожусь в ситуации, когда я думаю о расширении пользовательского контроллера для устранения репликации кода, но я не уверен, может ли это нарушить какое-то правило MVC и является ли это хорошей практикой. Для иллюстрации ниже приведен пример кода.
class MyController extends CoreController {
public function myMethod() {
echo 'Hello world!';
}
}
class OtherController extends MyController {
public function otherMethod() {
echo 'Hello life';
}
}
Я решил использовать Черты PHP, таким образом, я могу иметь горизонтальное наследование, исключая репликацию кода, и я думаю, что я следую принципам MVC.
trait Shared {
public function sharedMethod() {
echo 'Hello, i am sharedMethod()!';
}
}
class MyController extends CoreController {
use Shared;
public function myMethod() {
echo 'Hello, i am myMethod()!';
}
}
class OtherController extends CoreController {
use Shared;
public function otherMethod() {
echo 'Hello, i am otherMethod()!';
}
}
$MyController = new MyController();
$MyController->sharedMethod(); // Hello, i am sharedMethod()!
$OtherController = new OtherController();
$OtherController->sharedMethod(); // Hello, i am sharedMethod()!
Других решений пока нет …