Форум → Программирование → PHP для идиотов → Проектирование приложения. Ну что то типа того.
Проектирование приложения. Ну что то типа того.
-
Приветствую всех.
Чет с проблемой столкнулся, не знаю как лучше сделать. Вразумите пожалуйста.
(кодю на Yii)
Есть такие модули:
-новости
-статьи
-галерея
каждый модуль имеет контролеры, которые дают возможность совершать CRUD операции и выводить результат.
Для сайта визитки самое то.
Но теперь появился новый модуль(поселок) который имеет
-новости,
-статьи,
-галерею.
Вопрос, как сделать так, что бы:
1) Меньше дублировался код;
2) Существующие модули не потеряли своей независимости.
3) И получившийся код тоже был бы независим.
Какие есть варианты:
1) Расширять существующие модули добавляя к ним контролеры которые отвечают за "новости, статьи, галерея" этого объекта.
+ новости будут в новостях, статьи в статьях и так далее
- При переносе модуля "поселки" нужно будет копировать все модули и выборочно удалять контролеры.
2) Дублировать модули.
ну тут по моему только минусы
Может есть еще пути какие то? -
-
22 августа 2011 г. 21:26, спустя 2 часа 16 минут 59 секунд
ахуенный мегаответ.
:D
Professor, вообще посёлок это такая же сущность как и другие. Зачем контроллеры добавлять в поселок, у тебя в объекте поселка, например, должны уже загружаться твои зависимости, или как там в юи. Если ты редактируешь новость поселка то ты отправляешься в модуль новости. Или новости поселка это не те новости? Это должны быть новости об этом поселке, т.е. часть всех новостей. Просто если модули могут зависеть от данных других модулей, то тут надо задуматься, модули ли это для твоей задачи. Если ты не хочешь что бы модули зависели, тогда тебе надо сделать один модуль - сущности многие ко многим.Спустя 231 сек.можно сделать общие модули, или стандартные… смотря что у тебя модуль. -
23 августа 2011 г. 13:55, спустя 16 часов 29 минут 39 секунд
Есть модуль новости.
Там функционал по добавлению этой самой новости.
Появляется новый объект, "поселок".
Теперь, что бы добавить новость конкретно для поселка, нужно человеку показать тот же самый интерфейс для добавления новости и при этом, после сохранения новости еще и связь новости с объектом в базу данных внести.
То есть в любом случае нужно вносить изменения в модуль новости. А этого не хочется, и функционал новости дублировать не хочется. -
23 августа 2011 г. 14:11, спустя 15 минут 53 секунды
а этот, как его… мени-ту-мени?))Высокоуровневое абстрактное говно -
23 августа 2011 г. 15:32, спустя 1 час 20 минут 58 секунд
я чет нихуа не понял. это ты спрашиваешь про мультисайтовость? -
23 августа 2011 г. 16:03, спустя 30 минут 37 секунд
Ну как связи делать, я знаю.
Меня волнует такой вопрос, можно ли полностью избавится от дублирования кода в большом проекте?
Я просто пытаюсь, но у меня не получается =( -
24 августа 2011 г. 1:22, спустя 9 часов 18 минут 52 секунды
ну я в таких случаях делаю билонгсту новости от всяких поселков, городов, и прочих моделей, которые надо привязать, а при создании новости можно эту новость привязать к нужным записям в других моделях, а можно вообще не привязывать. ну для новой модели добавленной один селект в эдд/эдит и строчка в модели, поле в базе. больше четырех редко бывало)))
Есть модуль новости.
Там функционал по добавлению этой самой новости.
Появляется новый объект, "поселок".
Теперь, что бы добавить новость конкретно для поселка, нужно человеку показать тот же самый интерфейс для добавления новости и при этом, после сохранения новости еще и связь новости с объектом в базу данных внести.
То есть в любом случае нужно вносить изменения в модуль новости. А этого не хочется, и функционал новости дублировать не хочется.
но это в моем случае, а тебе, я так понял, нужен какой-то битрикс с супер-модулями для создания чего хочешь, лучше прямо из админки))))))
этакий конструктор записей, которые можно связывать туда-сюда, развязывать, перевязывать, а потом тупо rm -rf *Спустя 103 сек.первый пост не читал, не суди строго)))Спустя 103 сек.можно ли полностью избавится от дублирования кода в большом проекте?
на данной стадии развития фреймворков и систем управления контентом, имхо, полностью, нет. можно минимизировать грамотным проектированием. а его очень мало кто проводит -
24 августа 2011 г. 13:07, спустя 11 часов 45 минут 46 секунд
Professor, вот ту тебя есть поселок. При добавлении новости о поселке ты выбираешь поселок, тут работает только объект-маппер новости с данными фактически своими. При добавлении поселка с новостью у тебя в контроллер поселка передаются данные. Ты берешь объект-маппер поселка, например, и передаешь в него эти данные. при этом объект-маппер поселка использует объект-маппер новости для добавления новости в транзакции добавления поселка. Все. Понятно? Тем более у тебя же должны быть механизмы типа вызова экшена контроллера из вьюхи, в виде хелпера. Например, ты добавляешь новость при добавлении поселка. Ты во вьюхе вызваешь эдд-новость экшен контроллера новостей, но с вьюхой добавления новости, которая используется именно при добавлени поселка. Также ты же можешь вызвать экшен добавления новости в экшене добавления поселка, но эта ответвенность должна быть, как я уже ранее описал, у мапперов.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!