Повторное использование форм и контроллеров в Codeigniter - PullRequest
3 голосов
/ 08 июня 2011

Я изучаю парадигму OO и MVC (используя Codeigniter и PHP).Я продолжаю находить предупреждения, такие как это: Если вы вставляете один и тот же код в несколько файлов, значит, вы не используете OO / MVC должным образом .Итак, вот вопрос для более опытных программистов.

  1. У меня есть форма для создания пользователя, в которой я использую две очень похожие версии:

    • Версия 1 (на /volunteer/register) создана анонимным пользователем.Форма находится в контроллере volunteers и должна быть проверена администратором.

    • Версия 2 (в /admin/create_volunteer) создается вошедшим в систему администратором.Форма и валидация почти одинаковы, но отправляются с другими параметрами.

  2. Другой, похожий пример:

    Я хочу построитьразные пользовательские инструментальные панели, которые совместно используют шаблон, но будут использоваться разными пользовательскими ролями и имеют разные функции и информацию в зависимости от роли.На мой взгляд, я могу выбрать один из следующих вариантов:

    1. Создать контроллер панели мониторинга с тремя функциями, определяющими данные, загружаемые в шаблон панели мониторинга.
    2. Добавить функцию панели мониторинга в контроллер каждой роли (Volunteer, Admin и т. Д.)
    3. Создайте контроллер для каждого случая (Волонтер, Администратор и т. Д.)

Прошу прощения, если это кажется софомальным, но по сути яищу эмпирические правила, чтобы определить, как проектировать архитектуру в MVC.

Мои вопросы:

  • В первом примере мой логический выбор контроллеров (Volunteer& Admin) меньше идеального?Является ли репликация кода в этом случае приемлемой практикой?
  • Кто-нибудь может порекомендовать инструменты для разработки архитектуры, обеспечивающие логическую согласованность и хороший рабочий процесс для MVC?

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

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

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

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

Итак, не видя вашего реального кода - я бы сказал, не беспокойтесь об этом.По моему опыту, файлы просмотра для front-end и back-end почти всегда уникальны (совершенно разные UI).В общем, если вы обнаружите, что вы многократно дублируете один и тот же очень похожий код, самое время написать для него функцию, класс или шаблон.

3 голосов
/ 08 июня 2011

Кажется, вы хотели бы использовать некоторые ACL для разграничения ролей (волонтер и администратор), которые проверят, можно ли получить доступ к запрошенному модулю или действию.

Создание различных контроллеров для ролей, кажется, не является хорошим выбором, поскольку эту архитектуру нельзя использовать повторно - вы не хотите повторно использовать определенные функции Admin или Volunteer в других приложениях, а скорее модуль, который позволяет вам создавать и контролировать такие роли.

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

1 голос
/ 08 июня 2011

Большинство программистов рассматривают дублированный код как признак того, что решение проблемы все еще можно улучшить.

Если проблема в вашем случае заключается в том, что from определен в одном контроллере, но вам нужно использовать его ва также другой контроллер, тогда вам нужно лучшее место для определения формы, чтобы оба контроллера имели доступ к ней независимо друг от друга.

Сделайте форму настраиваемой, чтобы ее можно было использовать повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...