Скажімо, щоразу, коли я роблю операцію CRUD або змінюю відносини певним чином, я також хочу зробити щось інше. Наприклад, щоразу, коли хтось публікує публікацію, я також хочу щось зберегти в таблиці для аналізу. Можливо, не найкращий приклад, але в цілому є багато цього "згрупованого" функціоналу.
Зазвичай я бачу такий тип логіки, що передається в контролери. Це все чудово, як денді, поки ви не захочете відтворити цю функціональність у багатьох місцях. Коли ви починаєте вступати в партії, створюючи API та генеруючи фіктивний вміст, це стає проблемою із збереженням ДУХОМ
Я бачив способи управління цим подіями, сховищами, бібліотеками та додаванням до моделей. Ось моє розуміння кожного:
Послуги: саме тут, мабуть, більшість людей поставили цей код. Моя головна проблема сервісів полягає в тому, що іноді важко знайти в них конкретну функціональність, і я відчуваю, що про них забувають, коли люди зосереджені на використанні красномовства. Як я можу знати, що мені потрібно викликати метод publishPost()
у бібліотеці, коли я просто можу це зробити $post->is_published = 1
?
Єдиною умовою, за якою я добре працюю, є те, що ви ТИЛЬКО використовуєте сервіси (і в ідеалі робите красномовний доступним якось з контролерів разом).
Зрештою, здається, що це просто створить купу зайвих непотрібних файлів, якщо ваші запити, як правило, відповідають вашій структурі моделі.
Сховища: з того, що я розумію, це в основному як сервіс, але є інтерфейс, щоб ви могли перемикатися між ORM, які мені не потрібні.
Події: Я вважаю це найелегантнішою системою в певному сенсі, тому що ви знаєте, що події вашої моделі завжди називатимуться красномовними методами, тому ви можете записувати свої контролери так, як зазвичай. Я бачу, як вони стають безладними, і якщо хтось має приклади великих проектів, що використовують події для критичного зв'язку, я б хотів це побачити.
Моделі: Традиційно в мене були б класи, які виконували CRUD, а також обробляли критичні зв'язки. Це насправді полегшило роботу, оскільки ви знали всю функціональність навколо CRUD + все, що потрібно було зробити з нею.
Просто, але в архітектурі MVC це, як правило, не те, що я вважаю зробленим. У певному сенсі я віддаю перевагу цьому над сервісами, оскільки їх трохи простіше знайти, і файлів менше, щоб їх слідкувати. Хоча це може бути дезорганізовано. Я хотів би почути недоліки цього методу, і чому більшість людей, схоже, не роблять цього.
Які переваги / недоліки кожного методу? Я щось пропускаю?