На мой вкус, CodeIgniter слишком гибкий здесь - я бы скорее назвал это расплывчатым.«Модель» CI не имеет спецификаций и интерфейсов, это могут быть разные вещи:
объект предметной области , где каждый экземпляр представляет собой в основном записьстола.Иногда это «анемичный» объект домена, каждое свойство отображается непосредственно в столбец БД, мало поведения и мало или вообще не понимают отношения объектов и «графы» (скажем, внешние ключи в БД - это просто целочисленные идентификаторы в PHP).Или это также может быть «богатый (или истинный) объект предметной области» со всей бизнес-аналитикой, который также знает об отношениях: скажем, вместо $person->getAccountId()
(возвращает int) мы имеем $person->getAccount()
;возможно, также знает, как сохранить себя (и, возможно, также полный граф или связанный объект - возможно, некоторое понятие «грязности»).
A сервисный объект , связанныйна постоянство объектов и / или общие запросы к БД: быть DataMapper, DAO и т. д. В этом случае у нас обычно есть один единственный экземпляр (синглтон) объекта (небольшое или нулевое состояние), обычно один на таблицу БД или на класс домена,
Когда вы читаете в документах или форумах CI, скажем, о Person model
, вы никогда не узнаете, с каким шаблоном мы имеем дело.Хуже того: часто это неуклюжий микс из этих принципиально разных шаблонов.
По моему опыту, эта неформальность / неопределенность не специфична для CI, а скорее для фреймворков PHP.