Один из способов решения этой проблемы - держать свой пользовательский код подальше от часто переписываемых классов и помещать его в другой класс, который либо расширяет базовую модель, либо использует данную модель.
Итакесли у вас есть BlogModel, который постоянно переписывается, вы всегда можете иметь
class BlogWrapper extends BlogModel{
function __construct(){
parent::construct();
}
public function myBusinessLogic(){
$this->functionFromBlogModel();
}
}
или (и, возможно, лучше - но это только мое мнение)
class MyBusinessLogic {
private $model;
function __construct(){
$this->model = new BlogModel();
}
function doStuff($foo){
$bar = $this->model->get($foo);
$bar->doSomething();
$bar->save();
}
}
Это действительно зависитЧто касается характера вашей бизнес-логики, то если рассматриваемая логика является частью природы модели, то, возможно, первый подход лучше, в противном случае, если логика просто использует или иным образом «имеет» модель, тогда второй подходлучше.
Конечно, этот ответ совершенно не зависит от Доктрины или рамок, он больше похож на "ОО-философию":)