Как я уже вчера задавал вопрос об соглашениях об именах единых/множественных моделей, я столкнулся с концепцией модели домена. Насколько я понимаю до сих пор, модель домена - это просто объект, который представляет собой объект в моем приложении.
Чтобы использовать очень простой пример, примерно так:
class User {
private $name;
public setName() {}
public getName() {}
}
Теперь возникает вопрос, как я могу заполнить эту "модель домена" либо из какого-либо источника ввода, либо из базы данных или источника данных?
Во время чтения о моделях доменов у меня создалось впечатление, что внутри них должно быть не более чем представление рассматриваемой концепции домена. Итак, теперь мне также понадобится другой класс (DAO?), Ответственный за взаимодействие с источником данных, в данном случае таблицу базы данных с именем "Пользователь". Мой класс DAO будет обрабатывать вставки, обновления, удаления и множественные выборки.
Я придумал этот подход для заполнения пользовательской модели домена с помощью ввода, в этом случае постданных, а затем сохранения записи в базе данных с помощью класса UserDAO:
/**
* Populating Domain Model from input, and saving to database
*/
/** Instantiate User Domain Model, and populate it from input */
$user = new User();
$user->setName($_POST['name']);
/** Creating a new database record from User Domain Model */
$userdao = new UserDAO($pdo);
$userdao->insert($user);
И вот как я ожидал взаимодействия с базой данных, когда мне нужно получить данные, в этом случае несколько записей пользователя:
/**
* Fetching data from database to populate User Domain Models in an array
*/
/** Instantiate new UserDAO object to interact with User table */
$users = new UserDAO($pdo);
$users->findAll();
$user_collection = [];
/** Loop UserDAO object set to populate user collection array */
foreach ($users as $user) {
/** Create new User domain object from row, and add to collection array */
$user = new User($user);
$user_collection[$user->name()] = $user;
}
Кажется, что единственной реальной выгодой здесь является организация.
Моя текущая итерация по существу имеет класс User, который берет на себя все обязанности класса UserDAO выше и сразу же возвращает массивы данных из базы данных, которые затем я использую в своих "Контроллерах" / "Докладчиках" и которые стекают через мои (пассивные) взгляды.
Мне интересно:
-
Я на правильном пути?
-
Где применяется проверка ввода? Я предполагаю, что он должен идти в Domain Model, если я прав в своих предположениях до сих пор?
-
В чем преимущество использования этого метода, кроме помощи в организации базовых концепций, на которые будет опираться и работает приложение? Зачем мне этот дополнительный слой вместо того, чтобы напрямую работать с результатами массива из базы данных?