Приветствую всех! )
Такая темка полуфлейм/полуспор.
Берем архитектуру MVC. Модель это сущность чего? Можно, например, разделить их по назначению. Скажем, model_admin, model_default... А можно по таблицам. На каждую завести отдельную модель.
И вроде так и сяк плохо. В первом случае пересечением методов. Например, в админке нужно показывать список новостей. И юзеру нужно показывать тот же список новостей. Получается либо в админских контроллерах подключать юзерские модели, либо наоборот. Причем иногда из-за пары методов тянуть за собой весь ненужный в данном случае багаж. Не копипастить же один и тот же метод по нескольким моделям.
С разделением по таблицам тоже минус. Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво.
Получается и так и эдак неудобно. Боль... =( Кто что думает?
AllesKlar
2.12.2014 - 02:56
MVC - это не жесткий свод правил. Это рекомендация. А как ты ее реализуешь, твое дело.
Лично я сторонник класической объектной модели.
Для каждого класса свой набор методов работы с базой.
Если есть общие объекты, которых используют другие разные по смыслу объекты то они просто идут как свойства этих других объектов.
А копипастить - это конечно говнокод.
Скажем, есть объект юзер.
Есть объект Филиал.
И у первого и у второго есть адрес.
Значит:
Class Address
{
id: int;
zip: string;
city: string;
street: string;
}
Class User
{
id: int;
name: sting;
address: Address;
}
Class Filiale
{
id: int;
name: sting;
address: Address;
employe: List<User>;
}
_____________
[продано копирайтерам]
slobotsky.denis
2.12.2014 - 07:07
Цитата (paul85 @ 2.12.2014 - 02:27) |
Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво.
|
Что значит "некрасиво"? Вы пишите код, чтобы он работал, или чтобы его в лувре выставлять?
M в MVC это не про классы, а про весь код описывающий предметную область. А те кто пишет бизнес-логику в толстых контроллерах будут вечно гореть в аду!
_____________
PHP: The Right WayБесплатное обучение Symfony2Tox: 55BB67DE54B1CB14F8C37B4F3AED64E6A45922988D22F85EF75039751F26F05460664D978F5C
Игорь_Vasinsky
2.12.2014 - 07:29
paul85
я использую 2 базовый класса - класс контроллера и класс модели
и что не копипастить по 100500 раз один и тот же метод - я выношу их туда, наследование дело удобное.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kristall
2.12.2014 - 12:33
Кроме наследования есть еще композиция. В том же Yii есть офигительные штуки: behaviors и standalone actions, куда можно выносить дублируемый код, который никак наследованием не убрать.
_____________
echo '<pre>',print_r($var, 1);die;
root@server# make love && war
Invis1ble
2.12.2014 - 14:57
вы еще не пользуетесь traits ? тогда мы идём к вам !
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Игорь_Vasinsky
2.12.2014 - 15:00
Invis1ble
полезная весч. тока я под 5.3 сижу.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (paul85 @ 2.12.2014 - 02:27) |
С разделением по таблицам тоже минус. Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво |
это норма, использовать несколько моделей на одной странице. Другая проблема в том, что вы думаете о модели как о представлении таблицы из БД.
Другая ваша проблема в том что вы выделяете административную панель и делаете ее отдельной системой, из этого все ваши костыли (model_admin, model_default). Есть простое решение, сделать одну точку входа, c разграничением прав пользователей. То есть тупо не выделять админа, как то особенно, а давать ему права на какие специфичные модули, а другим пользователям их не давать. Если заказчику важно что бы это выглядело как какая-то отдельная админка, то ни кто не мешает вам подменять вьюхи в зависимости от контекста.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата |
Есть простое решение, сделать одну точку входа, c разграничением прав пользователей. |
Обычно в админке совершенно другой функционал, нежели в клиентской части. Мешать все в одну кучу... Да и с точки зрения безопасности как то не особо.
Не, я понимаю, когда нужно разделение полномочий. Модератор там, супермодератор, администратор. Но когда нужно администрирование системы, редактирование контента, статистики, настройки, да хотя бы та же самая раздача полномочий. Собирать весь функционал в единого монстра... Это изврат.
Я вот в нашем соревновании сделал так, весь исплевался.
ИМХО.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin, с точки зрения безопасности, тот вариант который я предложил, мне кажется лучше. Так как не надо поддерживать код для разных частей системы. Исправление в одном месте распрастранятся на всю систему.
Цитата (twin @ 2.12.2014 - 17:56) |
Обычно в админке совершенно другой функционал |
я это знаю, но так или иначе это такие же модули со своими модельками. Я просто исхожу из принципа, что функционал не должен дублироваться. При выделеной админке функционал будет дублироваться, а именно в контроллерах, роутах и представлении.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Безопасность я имею ввиду не ремонтную. А от взломов.
Цитата |
Я просто исхожу из принципа, что функционал не должен дублироваться |
Так а он и не дублируется по большей части. Вот допустим у админки этого форума ничего общего с вебмордой нет. Вообще ничего. Больше скажу, меня часто просят админку на другой домен повешать. Есть общий функционал, оно понятно. Если это фреймворк допустим, то естественно не стоит ставить их два. Но вот контроллеры, роутеры и прочие плюшки должны быть при этом разными.
Если это касается такой мелочи, что мы сейчас с вами мутим - оно понятно, что себе дороже. Но если это более-менее сурьёзный ресурс, то увы и ах.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 2.12.2014 - 20:57) |
Если это фреймворк допустим, то естественно не стоит ставить их два. Но вот контроллеры, роутеры и прочие плюшки должны быть при этом разными. |
зачем, если этого не требует заказчик?
Цитата (twin @ 2.12.2014 - 20:57) |
Если это касается такой мелочи, что мы сейчас с вами мутим - оно понятно, что себе дороже. Но если это более-менее сурьёзный ресурс, то увы и ах. |
Какой серьезный ресурс, что за абстрактный серьезные ресурсы?
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата |
При выделеной админке функционал будет дублироваться, а именно в контроллерах, роутах и представлении. |
Почему он будет дублироваться? Это же совсем разные вещи и контроллеры должны быть разные и вьюшки, так как отвечают за совсем разные задачи.
ИМХО без выделенной админки будет бардак.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
chee
Цитата |
зачем, если этого не требует заказчик? |
Затем, что может в любой момент потребовать. И вообще, чего все так боятся повтора кода... Лично я чувствую себя куда комфортнее, когда знаю, что изменив что-либо в той же админке, у меня ничего не поплывет на клиентской стороне. А нажать ctrl+c куда проще и быстрее, нежели ломать голову, как это все безболезненно совместить.
Цитата |
Какой серьезный ресурс, что за абстрактный серьезные ресурсы? |
Любой, требующий администрирования на уровне системы. Форум, магазин, банк, что угодно, что имеет кода чуть больше, чем в гостевой книге, которую мы пишем второй месяц.
Это камушек в огород.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 2.12.2014 - 22:46) |
Затем, что может в любой момент потребовать. И вообще, чего все так боятся повтора кода... Лично я чувствую себя куда комфортнее, когда знаю, что изменив что-либо в той же админке, у меня ничего не поплывет на клиентской стороне. А нажать ctrl+c куда проще и быстрее, нежели ломать голову, как это все безболезненно совместить. |
вы серьезно?
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.