Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Так устроены Модели у меня, а как у вас?
Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
Я использую MVC. С контролерами и шаблона, мне все понятно, но вот модели, тут не все так просто. Некоторое время назад мне нужно было определиться какая структура у меня будет у моделей, и я пошел искать чужой опыт. Нашел только это http://laravel[dot]ru/docs/v3/models это и было принято за основу. Я не буду говорить про то как устроено там, а буду о том к чему я сам пришел и сейчас использую.
Модели у меня делаться на 3 типа
1. Сущности (лежат в \Models\Entities и имеет такое же пространство имен)
2. Хранилища (в \Models\Repositories)
3. Сервисы (в \Models\Services)
Сущности
========
Это простейшие объекты, являющиеся по сути прямой проекцией данных из БД.
У сущностей могут быть методы напрямую относящиеся к ним (читай к данным)
Поэтому методы не могут быть статическими, то есть методы работают с конкретным объектом, созданным на основание данных из БД.
Например, не может быть такого метода, потому что это просто не логично, добавить конкретному пользователю другого пользователя нельзя. Добавить пользователя можно будет с помощью хранилища работающего с пользователями, о чем ниже.
Чего не должно быть в хранилище? Логики работы с данными. Например, если нам нужно как-то данные из БД обработать для получения результата, то это уже задача для сервиса, о которых ниже.
Такой код в хранилище недопустим.
Сервисы
=======
Так как это последний тип моделей, все что не подошло для предыдущих двух помещаем сюда Звучит не серьезно, но в моем реальном проекте, что бы здесь не размещалось, не противоречит названию Сервис, так что помойкой это врятли станет.
Продолжим наши примеры с пользователем и приведём, что бы могло быть сервисом, кроме не подходящего для хранилища, но подходящего для сервиса, примера выше.
private static function _checkPass($pass,$pass_hash){}
}
В чем вопрос
============
А вопросов собственно несколько
1. Какие очевидные недостатки вы видите в используемой мною схеме?
2. Какие предложения по улучшению?
3. Если ли у вас какое-то разбиение на типы моделей, что используете вы?
Предвидя будущие вопрос сразу говорю, что про ORM знаю, не использую, не уговаривайте использовать не буду так как работаю над большим проектом где ORM нет и переписывать систему на ORM не буду. В новых проектах пока которых не предвидеться возможно буду использовать ORM, но подозреваю что использование ORM не отменяет необходимости разбиения моделей на разные типы.
Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
caballero пишет:
индуский код
Отличное начало.
С вами разговор закончен
caballero
Отправлено: 18 Сентября, 2013 - 12:51:00
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
очередное самолюбивое и самоувереное школоло.
я тебе по делу написал. Сущности на основе паттерна Active record и статических фабричных методов перекрывают 90% функционала. Остальное можно сделать хелперными классами -
всегда будет витиеватый кусок логики который не впишется в структуру моделей и придется выполнять нативный SQL.
если считаешь что архитектура которую ты слямзил - клевая а не индусская - зачем вопросы задаешь.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
вообще то бизнес-логика должна относится к модели. Просто модель обычно более широкое понятие чем набор классов. Поэтому в модель могут входить как Entity для выполнения элементарных операций так и более сложный функционал.
Модель вообще может быть отдеена от приложения -это может быть отдельный модуль к которому ходят через апи или вебсервисы. Или, как раньше делали, - бизнес-логика реализуется хранимыми процедурами
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Да человек всеравно не понимает и стоит на своем.
Пусть так и остается, раз слушать не хочет.
Когда настанет ключевой момент в будущем - он вспомнит этот топик и сядет переписывать.
Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
DeepVarvar пишет:
Да человек всеравно не понимает и стоит на своем.
Пусть так и остается, раз слушать не хочет.
Когда настанет ключевой момент в будущем - он вспомнит этот топик и сядет переписывать.
Не понял о чем вы.
esterio
Отправлено: 18 Сентября, 2013 - 19:21:13
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
chalenkoa
Если Вы пришли на форум с вопросами значит готовы выслушать критику, которая по любому будет, так как каждому свое.
Вот я сегодня считаю что я написал идеальный код, а завтра для меня ето уже индуськый код.
Теперь по существу
Возмем мой любимый Yii - так там модель имеет:
- данные с базы
- допольнительные аттрибуты
- валидация
- связи
- текстовое описание полей для аттрибута label
- ошибкы заполнения
- behavior-ы
- action-ы
- поиск по primary key
- поиск по аттрибутам
- поиск по sql
- поиск одного, несколькых и всех записей
- структуру таблицы
- кеширование
- типи полей
- работа с формой
ну и много еще чего
вот видите сколько обьязоностей берет на себя модель?
У Вас же все ети три типа моделей можна смело обеденить в одну можель. Ну и не всегда модель должна работать с базой.
chalenkoa
Отправлено: 18 Сентября, 2013 - 20:39:15
Новичок
Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
esterio
Круто что то по теме.
Я не работаю с Yii поэтому было бы интересно если бы ты рассказал подробнее о том что там с моделями в том аспекте что я предложил к обсуждению.
В том виде что ты дал информацию, она мало полезна извини.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.