[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сущность моделей
Страницы: 1, 2
paul85
Приветствую всех! )

Такая темка полуфлейм/полуспор.

Берем архитектуру MVC. Модель это сущность чего? Можно, например, разделить их по назначению. Скажем, model_admin, model_default... А можно по таблицам. На каждую завести отдельную модель.

И вроде так и сяк плохо. В первом случае пересечением методов. Например, в админке нужно показывать список новостей. И юзеру нужно показывать тот же список новостей. Получается либо в админских контроллерах подключать юзерские модели, либо наоборот. Причем иногда из-за пары методов тянуть за собой весь ненужный в данном случае багаж. Не копипастить же один и тот же метод по нескольким моделям.

С разделением по таблицам тоже минус. Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво.

Получается и так и эдак неудобно. Боль... =( Кто что думает?
AllesKlar
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
Цитата (paul85 @ 2.12.2014 - 02:27)
Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво.

Что значит "некрасиво"? Вы пишите код, чтобы он работал, или чтобы его в лувре выставлять?

M в MVC это не про классы, а про весь код описывающий предметную область. А те кто пишет бизнес-логику в толстых контроллерах будут вечно гореть в аду!

_____________
PHP: The Right Way
Бесплатное обучение Symfony2

Tox: 55BB67DE54B1CB14F8C37B4F3AED64E6A45922988D22F85EF75039751F26F05460664D978F5C
Игорь_Vasinsky
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
Кроме наследования есть еще композиция. В том же Yii есть офигительные штуки: behaviors и standalone actions, куда можно выносить дублируемый код, который никак наследованием не убрать.

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
Invis1ble
вы еще не пользуетесь traits ? тогда мы идём к вам ! smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Игорь_Vasinsky
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
chee
Цитата (paul85 @ 2.12.2014 - 02:27)

С разделением по таблицам тоже минус. Вот мне надо вывести на главную страницу: новости, акции, меню... И что подключать 5 моделей? Тоже некрасиво

это норма, использовать несколько моделей на одной странице. Другая проблема в том, что вы думаете о модели как о представлении таблицы из БД.

Другая ваша проблема в том что вы выделяете административную панель и делаете ее отдельной системой, из этого все ваши костыли (model_admin, model_default). Есть простое решение, сделать одну точку входа, c разграничением прав пользователей. То есть тупо не выделять админа, как то особенно, а давать ему права на какие специфичные модули, а другим пользователям их не давать. Если заказчику важно что бы это выглядело как какая-то отдельная админка, то ни кто не мешает вам подменять вьюхи в зависимости от контекста.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
chee
Цитата
Есть простое решение, сделать одну точку входа, c разграничением прав пользователей.
Обычно в админке совершенно другой функционал, нежели в клиентской части. Мешать все в одну кучу... Да и с точки зрения безопасности как то не особо.

Не, я понимаю, когда нужно разделение полномочий. Модератор там, супермодератор, администратор. Но когда нужно администрирование системы, редактирование контента, статистики, настройки, да хотя бы та же самая раздача полномочий. Собирать весь функционал в единого монстра... Это изврат.

Я вот в нашем соревновании сделал так, весь исплевался.

ИМХО.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
twin, с точки зрения безопасности, тот вариант который я предложил, мне кажется лучше. Так как не надо поддерживать код для разных частей системы. Исправление в одном месте распрастранятся на всю систему.


Цитата (twin @ 2.12.2014 - 17:56)
Обычно в админке совершенно другой функционал

я это знаю, но так или иначе это такие же модули со своими модельками. Я просто исхожу из принципа, что функционал не должен дублироваться. При выделеной админке функционал будет дублироваться, а именно в контроллерах, роутах и представлении.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Безопасность я имею ввиду не ремонтную. А от взломов.
Цитата
Я просто исхожу из принципа, что функционал не должен дублироваться
Так а он и не дублируется по большей части. Вот допустим у админки этого форума ничего общего с вебмордой нет. Вообще ничего. Больше скажу, меня часто просят админку на другой домен повешать. Есть общий функционал, оно понятно. Если это фреймворк допустим, то естественно не стоит ставить их два. Но вот контроллеры, роутеры и прочие плюшки должны быть при этом разными.

Если это касается такой мелочи, что мы сейчас с вами мутим - оно понятно, что себе дороже. Но если это более-менее сурьёзный ресурс, то увы и ах.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 2.12.2014 - 20:57)
Если это фреймворк допустим, то естественно не стоит ставить их два. Но вот контроллеры, роутеры и прочие плюшки должны быть при этом разными.

зачем, если этого не требует заказчик?

Цитата (twin @ 2.12.2014 - 20:57)
Если это касается такой мелочи, что мы сейчас с вами мутим - оно понятно, что себе дороже. Но если это более-менее сурьёзный ресурс, то увы и ах.

Какой серьезный ресурс, что за абстрактный серьезные ресурсы?


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Arh
Цитата
При выделеной админке функционал будет дублироваться, а именно в контроллерах, роутах и представлении.

Почему он будет дублироваться? Это же совсем разные вещи и контроллеры должны быть разные и вьюшки, так как отвечают за совсем разные задачи.
ИМХО без выделенной админки будет бардак.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
chee
Цитата
зачем, если этого не требует заказчик?
Затем, что может в любой момент потребовать. И вообще, чего все так боятся повтора кода... Лично я чувствую себя куда комфортнее, когда знаю, что изменив что-либо в той же админке, у меня ничего не поплывет на клиентской стороне. А нажать ctrl+c куда проще и быстрее, нежели ломать голову, как это все безболезненно совместить.
Цитата
Какой серьезный ресурс, что за абстрактный серьезные ресурсы?

Любой, требующий администрирования на уровне системы. Форум, магазин, банк, что угодно, что имеет кода чуть больше, чем в гостевой книге, которую мы пишем второй месяц.
Свернутый текст
Это камушек в огород. smile.gif


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 2.12.2014 - 22:46)
Затем, что может в любой момент потребовать. И вообще, чего все так боятся повтора кода... Лично я чувствую себя куда комфортнее, когда знаю, что изменив что-либо в той же админке, у меня ничего не поплывет на клиентской стороне. А нажать ctrl+c куда проще и быстрее, нежели ломать голову, как это все безболезненно совместить.

вы серьезно?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.