ФорумПрограммированиеPHP для идиотов → Проектирование приложения. Ну что то типа того.

Проектирование приложения. Ну что то типа того.

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 22 августа 2011 г. 11:53

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

    (кодю на Yii)

    Есть такие модули:
    -новости
    -статьи
    -галерея

    каждый модуль имеет контролеры, которые дают возможность совершать CRUD операции и выводить результат.

    Для сайта визитки самое то.

    Но теперь появился новый модуль(поселок) который имеет
    -новости,
    -статьи,
    -галерею.


    Вопрос, как сделать так, что бы:
    1) Меньше дублировался код;
    2) Существующие модули не потеряли своей независимости.
    3) И получившийся код тоже был бы независим.



    Какие есть варианты:
    1) Расширять существующие модули добавляя к ним контролеры которые отвечают за "новости, статьи, галерея" этого объекта.
    + новости будут в новостях, статьи в статьях и так далее
    - При переносе модуля "поселки" нужно будет копировать все модули и выборочно удалять контролеры.

    2) Дублировать модули.
    ну тут по моему только минусы

    Может есть еще пути какие то?




  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 22 августа 2011 г. 19:09, спустя 7 часов 16 минут 4 секунды

    ахуенный мегаответ.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 22 августа 2011 г. 21:26, спустя 2 часа 16 минут 59 секунд

    ахуенный мегаответ.

    :D

    Professor, вообще посёлок это такая же сущность как и другие. Зачем контроллеры добавлять в поселок, у тебя в объекте поселка, например, должны уже загружаться твои зависимости, или как там в юи. Если ты редактируешь новость поселка то ты отправляешься в модуль новости. Или новости поселка это не те новости? Это должны быть новости об этом поселке, т.е. часть всех новостей. Просто если модули могут зависеть от данных других модулей, то тут надо задуматься, модули ли это для твоей задачи. Если ты не хочешь что бы модули зависели, тогда тебе надо сделать один модуль - сущности многие ко многим.
    Спустя 231 сек.
    можно сделать общие модули, или стандартные… смотря что у тебя модуль.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 23 августа 2011 г. 13:55, спустя 16 часов 29 минут 39 секунд

    Есть модуль новости.
    Там функционал по добавлению этой самой новости.

    Появляется новый объект, "поселок".
    Теперь, что бы добавить новость конкретно для поселка, нужно человеку показать тот же самый интерфейс для добавления новости и при этом, после сохранения новости еще и связь новости с объектом в базу данных внести.
    То есть в любом случае нужно вносить изменения в модуль новости. А этого не хочется, и функционал новости дублировать не хочется.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 23 августа 2011 г. 14:11, спустя 15 минут 53 секунды

    а этот, как его… мени-ту-мени?))
    Высокоуровневое абстрактное говно
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz 23 августа 2011 г. 15:32, спустя 1 час 20 минут 58 секунд

    я чет нихуа не понял. это ты спрашиваешь про мультисайтовость?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 23 августа 2011 г. 16:03, спустя 30 минут 37 секунд

    Ну как связи делать, я знаю.
    Меня волнует такой вопрос, можно ли полностью избавится от дублирования кода в большом проекте?

    Я просто пытаюсь, но у меня не получается =(
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 24 августа 2011 г. 1:22, спустя 9 часов 18 минут 52 секунды


    Есть модуль новости.
    Там функционал по добавлению этой самой новости.

    Появляется новый объект, "поселок".
    Теперь, что бы добавить новость конкретно для поселка, нужно человеку показать тот же самый интерфейс для добавления новости и при этом, после сохранения новости еще и связь новости с объектом в базу данных внести.
    То есть в любом случае нужно вносить изменения в модуль новости. А этого не хочется, и функционал новости дублировать не хочется.
    ну я в таких случаях делаю билонгсту новости от всяких поселков, городов, и прочих моделей, которые надо привязать, а при создании новости можно эту новость привязать к нужным записям в других моделях, а можно вообще не привязывать. ну для новой модели добавленной один селект в эдд/эдит и строчка в модели, поле в базе. больше четырех редко бывало)))

    но это в моем случае, а тебе, я так понял, нужен какой-то битрикс с супер-модулями для создания чего хочешь, лучше прямо из админки))))))
    этакий конструктор записей, которые можно связывать туда-сюда, развязывать, перевязывать, а потом тупо rm -rf *
    Спустя 103 сек.
    первый пост не читал, не суди строго)))
    Спустя 103 сек.
    можно ли полностью избавится от дублирования кода в большом проекте?

    на данной стадии развития фреймворков и систем управления контентом, имхо, полностью, нет. можно минимизировать грамотным проектированием. а его очень мало кто проводит
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 24 августа 2011 г. 13:07, спустя 11 часов 45 минут 46 секунд

    Professor, вот ту тебя есть поселок. При добавлении новости о поселке ты выбираешь поселок, тут работает только объект-маппер новости с данными фактически своими. При добавлении поселка с новостью у тебя в контроллер поселка передаются данные. Ты берешь объект-маппер поселка, например, и передаешь в него эти данные. при этом объект-маппер поселка использует объект-маппер новости для добавления новости в транзакции добавления поселка. Все. Понятно? Тем более у тебя же должны быть механизмы типа вызова экшена контроллера из вьюхи, в виде хелпера. Например, ты добавляешь новость при добавлении поселка. Ты во вьюхе вызваешь эдд-новость экшен контроллера новостей, но с вьюхой добавления новости, которая используется именно при добавлени поселка. Также ты же можешь вызвать экшен добавления новости в экшене добавления поселка, но эта ответвенность должна быть, как я уже ранее описал, у мапперов.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!