Как организовать бизнес-логику в проекте Kohana 3 - PullRequest
9 голосов
/ 15 марта 2010

Я ищу советы, учебные пособия и ссылки о том, как настроить веб-приложение среднего размера с помощью Kohana 3. В прошлом я применял шаблоны MVC, но никогда не работал против «формализованной» инфраструктуры MVC, поэтому все еще разбираюсь в терминологии - играю с основными примерами, строю представления и шаблоны и т. д.

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

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

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

Предположим, у меня уже есть весь API, который уже разработан и работает - перечислите все компании, отредактируйте бизнес, перечислите компании по названию улицы, создайте предложение, зарегистрированное как бизнес, и т. Д., И я просто ищу, как соответствовать функциональность в шаблон MVC и в структуру приложения Kohana, которая может быть легко расширена.

  • Знаете ли вы примеры из реальной жизни приложений, "загруженных базой данных", таких как каталоги, онлайн-сообщества ... с областью входа, построенной на Kohana 3, предпочтительно с открытым исходным кодом, чтобы я мог взглянуть, как они сделай это?

  • Существуют ли соглашения или передовые практики о том, как структурировать расширяемую область входа для конечных пользователей в проекте Kohana, который может обрабатывать не только страницу бизнес-каталога, но и другие продукты на отдельных страницах?

  • Знаете ли вы какие-нибудь хорошие ресурсы по созданию сложных приложений с помощью Kohana?

  • Вы построили нечто подобное и могли бы дать мне рекомендации по структуре проекта?

Bounty

Я присуждаю вознаграждение @antpaw, потому что он предоставил мне приложение Kohana с некоторой бизнес-логикой, которая дает мне много примеров. Приветствую @Pixel Developer за ваш отличный вклад - как часто, я бы хотел, чтобы кто-то мог разделить награду!

Ответы [ 2 ]

12 голосов
/ 18 марта 2010

Множество вопросов, чтобы ответить здесь, я буду стараться изо всех сил.

Знаете ли вы примеры из реальной жизни приложений, "загруженных базой данных", таких как каталоги, онлайн-сообщества ... с областью входа, построенной на Kohana 3, где я мог бы взглянуть, как они это делают?

Есть несколько примеров приложений. Вуди Гилк (основатель Kohana) опубликовал код на своем персональном веб-сайте на github . Для области входа он назначает значение cookie. Kohana 3 / 2.4 подписывает файлы cookie, что делает их безопасными и устраняет необходимость проведения сеансов. Это может быть не всем по вкусу, поэтому вы всегда можете использовать встроенную библиотеку аутентификации, которая использует как сеансы, так и файлы cookie.

Вот некоторые другие проекты, которые могут вас заинтересовать:

  • Shindig - Легкий модуль блога для кохана 3
  • Kohanut - Расширяемая CMS, написанная на Kohana 3

Существуют ли соглашения или передовые практики о том, как структурировать расширяемую область входа для конечных пользователей в проекте Kohana, который может обрабатывать не только страницу бизнес-каталога, но и другие продукты на отдельных страницах?

Если я правильно вас понимаю, вы хотите создать окно входа для каждой из этих страниц? Это легко сделать с Kohana 3, поскольку мы можем воспользоваться преимуществами H в HMVC. Сэм де Фрессинет написал статью о техническом блоге iBuilding. Масштабирование веб-приложений с помощью HMVC .

Затем вы можете выполнить внутренний запрос к контроллеру входа или выполнить действие и вывести ответ на страницу просмотра.

$login = Request::factory('login')->execute()->response;

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

if (Request::instance() !== $this->request)
{
    print 'Internal called made with Request::factory';
}

Знаете ли вы какие-нибудь хорошие ресурсы по созданию сложных приложений с помощью Kohana?

Там не будет документации, показывающей, как создавать сложные приложения. По мнению сообщества Kohana, вы являетесь разработчиком PHP и должны решить эти проблемы самостоятельно. Если вы не можете, тогда вам не следует использовать коану.

Вы построили нечто подобное и могли бы дать мне рекомендации по структуре проекта?

Как только вы поймете, как Kohana 3 находит файлы, все легко понять.

|- classes
|-- controller
|-- model
|- views

Например:

Controller_Mathew extends Controller 

Будет искать файл с именем mathew.php в:

classes/controller

Подчеркивания могут использоваться для указания более глубоких каталогов. Пример: * 1 059 *

Controller_Mathew_Davies extends Controller

будет искать файл с именем davies.php в:

classes/controller/mathew/

Как видите, подчеркивания в имени контроллера действуют как разделители каталогов. Это звучит правдоподобно для моделей и классов ванили.

7 голосов
/ 15 марта 2010

Я бы использовал модуль авторизации, который поставляется вместе с Kohana для входа в систему. Это даст вам таблицу ролей, где вы можете настроить возможные параметры разрешений и связать их с пользователями позже. После этого вы можете проверить внутри __constructor () или action_function () каждого контроллера, имеет ли пользователь требуемую роль, например, с помощью функции -> has (). Вам также следует использовать модуль ORM, он просто великолепен, поскольку у вас много связей между таблицами. Также метод __get () внутри объекта ORM может быть очень удобен.

Также довольно просто расширить функцию контроллера, установив новый параметр в NULL и проверив это в операторе if. например вам нужна только одна функция для редактирования старой записи или добавления новой.

public funciton action_manage($id = NULL)
{
    $entry = ORM::factory('entry', $id); // if id is null a new entry will be returned 
}

Также важно, чтобы вы структурировали представления в подпапки, чтобы избежать беспорядочного просмотра каталога.

...