Мой вопрос касается вариантов реализации …
(Я написал на PHP, но вопрос применим к общему ООП)
Возьмите пример доменного объекта:
class User{
private $id;
private $name;
private $email;
...
etc
}
В настоящее время он создан в 2 местах.
контроллер:
Запрос приходит со стороны клиента. Контроллер извлекает переменные POST, создает экземпляр объекта User и передает его в стек.
Уровень доступа к данным:
Некоторый метод getUser () вызывается из некоторого сервиса. Пользовательские данные извлекаются из БД, и DAL создает экземпляр объекта User и передает его в стек.
У нас есть 2 варианта для конструктора
Опция 1
public function __construct($id, $name, $email,...){
$this->id = $id;
$this->name = $name;
$this->email = $email;
...
}
В этом случае контроллер создает объект следующим образом:
parse_str($_POST['data'], $data);
$user = new User($data['id'], $data['name'], $data['email'],...);
И DAL создает объект следующим образом:
$row = ...Get row from DB...
$user = new User($row['id'], $row['name'], $row['email'],...);
Это ясно / явно, но связывает создание объекта нашего домена с контроллером и DAL. Если мы решим добавить еще одно поле в таблицу User, мы должны обновить объект домена, контроллер и DAL.
Вариант 2
public function __construct($data){
...check $data is valid etc, handle if not...
$this->id = $data['id'];
$this->name = $data['name'];
$this->email = $data['email'];
...
}
В этом случае контроллер создает объект следующим образом:
parse_str($_POST['data'], $data);
$user = new User($data);
И DAL создает объект следующим образом:
$row = ...Get row from DB...
$user = new User($row);
Теперь, если мы решим добавить другое поле в таблицу User, нам нужно только обновить объект домена.
Вопросы
Задача ещё не решена.
Других решений пока нет …