Я только начинаю экспериментировать с фреймворком Slim и RedBean ORM в PHP.
Допустим, у меня есть CommentService
зарегистрирован в контейнере для инъекций зависимостей Slim. Кроме того, у меня есть модель данных с именем Comment_Model
который используется RedBean для представления комментариев, хранящихся в базе данных.
Теперь из моего маршрута / контроллера я хочу добавить новый комментарий в базу данных. Это то, где я немного запутался — каков наилучший способ передачи информации от маршрута / контроллера в сервисный метод?
Я могу придумать как минимум три разных способа сделать это;
1 — использовать экземпляр Comment_Model
предоставить данные:
class CommentService {
public function add(\App\Data\Model\Model_Comment $comment){
// Let the ORM persist the data
}
}
Это похоже на злоупотребление классом сущности модели данных — разве это не предназначено для создания экземпляра ORM, а не как удобная функция для передачи новых, неискаженных данных?
2 — Отдельные параметры
class CommentService {
public function add($userId, $message, $replyToId){
// Let the ORM create a proper data model and persist the data
}
}
Он работает, когда есть только три параметра, но для чего-то более сложного, чем комментарий, он может легко выйти из-под контроля …
3 — Создать объект передачи данных
class CommentDTO{
public $userId;
public $message;
public $replyToId;
}class CommentService {
public function add(\App\Data\DTO\CommentDTO $comment){
// Let the ORM create a proper data model and persist the data
}
}
Не слишком ли сложно создавать DTO для локального использования?
Есть ли здесь какие-то жесткие права и недостатки? Каков «нормальный» способ сделать такие вещи?
Задача ещё не решена.
Других решений пока нет …