Это беспокоило меня довольно долгое время, но теперь мне нужно найти ответ.Использование доктрины для абстрактных операций CRUD
Мы работаем над довольно большим проектом, используя CodeIgniter plus Doctrine.
Наше приложение имеет интерфейс, а также область администрирования для проверки/изменения/удаления данных.
Когда мы проектировали передний конец, мы просто потребляли большую часть коды Доктрины прямо в контроллере:
//In semi-pseudocode
function register()
{
$data = get_post_data();
if (count($data) && isValid($data))
{
$U = new User();
$U->fromArray($data);
$U->save();
$C = new Customer();
$C->fromArray($data);
$C->user_id = $U->id;
$C->save();
redirect_to_next_step();
}
}
Очевидно, когда мы пошли, чтобы сделать дублирование просмотров админ коды начали и учитывая, что мы были в " get it DONE ", поэтому он теперь воняет с раздуванием кода.
Я переместил много функциональности (бизнес-логику) в модель с использованием методов модели, но базовый CRUD не подходит там.
Я собирался поместить CRUD в статические методы, то есть Customer :: save ($ array) [будет выполнять как вставку, так и обновление в зависимости от того, присутствует ли prikey в массиве], Customer :: delete ($ id), Customer :: getObj ($ id = false) [если false, получить все данные]. Это станет болезненным, хотя для 32 модельных объектов (и растет).
Кроме того, порой модели должны взаимодействовать (как взаимодействие выше между пользовательскими данными и данными клиента), которые не могут выполняться статическим методом без нарушения инкапсуляции.
Я предполагаю добавить еще один слой к этому (выставляя веб-службы), поэтому, зная, что в какой-то момент будут 3 «контроллеры», мне нужно инкапсулировать этот CRUD где-то (очевидно), но статические методы - путь , или есть еще одна дорога?
Ваш вклад очень ценится.
Это имеет смысл. Я думаю, я слишком сильно задумался, думая, что Модель должна быть в соотношении 1: 1 к таблице; нужно думать больше за пределами коробки. Благодарю. – TomWilsonFL