Это беспокоило меня довольно долго, но теперь мне необходимо найти ответ.
Мы работаем над довольно крупным проектом с использованием CodeIgniter plus Doctrine.
Наше приложениеимеет внешний интерфейс и область администратора для проверки / изменения / удаления данных.
Когда мы проектировали внешний интерфейс, мы просто использовали большую часть кода 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();
}
}
Очевидно, что когда мы пошли делать административные представления, началось дублирование кода, и, учитывая, что мы были в режиме «получи это», теперь он воняет от раздувания кода.
Я переместил много функций(бизнес-логика) в модель с использованием методов модели, но базовый CRUD там не подходит.
Я собирался попытаться поместить CRUD в статические методы, то есть Customer :: save ($ array) [выполнять вставку и обновление в зависимости от того, присутствует ли в массиве prikey], Customer :: delete ($ id), Customer :: getObj ($ id = false) [если false, получить все данные].Это станет болезненным, хотя для 32 объектов модели (и растет).
Кроме того, иногда модели должны взаимодействовать (как взаимодействие выше между данными пользователя и данными клиента), что невозможно сделать встатический метод без нарушения инкапсуляции.
Я предполагаю добавить к этому еще один слой (предоставление веб-сервисов), поэтому, зная, что в какой-то момент будет 3 «контроллера», мне нужно где-то инкапсулировать этот CRUD (очевидно), но статические методы - это путь, или есть другой путь?
Ваш вклад очень важен.