Ну я все-таки развлеку. Но наверно, это мой последний довод. Зато весомый. Я расскажу к чему приводит этот подход, который
@MiksIr называет простым.
Давным-давно код для сайта devconf.ru
@admin взял с какого-движка с прошлых работ. Там были какие-то заказы и его присобачили для билетов на конференцию. Чего-то подпилили и оно заработало.
Заказ - сумма, статус(request, done,cancel), etc.
Потом возникла необходимость обработать такой кейс. Фирма не успевает оплатить безналом, поэтому пишет гарантийное письмо, где обязуется оплатить. Эти неоплаченные участники должны попасть в списки(для столиков регистрации), но не должны иметь статус done чтобы отличать их от оплаченных. Как решили? Добавить статус guaranteed. А в код, где раньше была проверка $order->status == 'done', поменяли $order->status == 'done' || $order->status == 'guaranteed'.
Потом нужно было как-то обрабатывать бесплатных участников. Прессу, оргкомитет, участники от партнеров(нужно было в одном месте держать все, чтобы видеть количество обедов, которые надо заказать, и так далее). Реализовалось это в такую схему. Таких участников просили сделать заказ и прислать номер заказа(!) администратору. Он находил этот заказ, и делал сумму заказа равной нулю(ну чтобы отчеты по суммам не попортить) и проставлял новые статусы(press, orgkomitet, partner) заказу. Форма редактирования заказа в админке оставалась "простой", но остальной код усложнялся. Условия для списка участников менялись Иногда они вытаскивались SQL запросом, поэтому не везде можно было облегчить это перемещение условия в метод модели. Статус заказа был крайне интересным. request, done,cancel, guaranteed, press, orgkomitet, partner.
Плюс добавились еще express. Это те, кто не успевал оплатить, но обещал оплатить наличкой на регистрации. Ну понятно. Девконф с его текущим функционалом в данной модели был бы едким говнокодом.
Мне пришлось отойти от такого crud и сделать форму чуть менее простой.
https://drive.google.com/open?id=0B9wGRpcG-SQDelctck5ScWo2S3M
Создать отдельные модели для бесплатных участников(на форме старый вариант их создания, который попросили оставить. они сейчас выписываются скопом на конкретного участника в другом месте админки). Статус вернуть на место, чтобы он был понятным. Ну там видно в общем. Дизайн отстой, но на него всегда нет времени.
Основная мысль. Каждый описанный мною новый функционал был небольшим. Переписывать всю модель приложения ради него, не стоило бы. Бизнесу выгоднее было бы не переписывать. Да и девелопер не стал бы. Влом и т.д.
Получив же нормальную модель, приложение получает такой большой потенциал для развития, гибкость,что сложно описать. Сложно это понять, имея отстойную модель.