Я использую yii2 и считаю, что это очень удобная активная запись.
Но иногда я обнаруживаю, что мы всегда помещаем логические функции в активную запись, которая, как мне кажется, должна принадлежать домену.
И я просмотрел несколько книг, в большинстве из них предлагается использовать преобразователь данных для сопоставления записи базы данных с доменом.
Хотя это хороший способ разделить домен и данные, я не хочу тратить зря функции активной записи из yii2.
Я думаю, мы можем расширить домен от активной записи, чтобы операции с базой данных выполнялись в активной записи родительского класса домена, а операции бизнес-логики - в домене:
class UserModel extends ActiveRecord{
// do database operations
}
class UserDomain extends UserModel{
// do domain's logic
}
Не знаю, великолепен ли этот дизайн? Скажите, пожалуйста, ваши предложения.
обновление # 1
class UserDomain {
private $model;
public function __construct(UserModel $model){
$this->model=$model;
}
public function __set($name, $value){
if (isset($this->model->$name)) {
$this->model->$name=$value;
} else {
$this->$name=$value;
}
}
public function __get($name){
if (isset($this->model->$name)) {
return $this->model->$name;
} else {
return $this->$name;
}
}
}