Создание реального объектно-ориентированного фреймворка на PHP, предложения нужны - PullRequest
4 голосов
/ 03 октября 2009

Я использую платформу CodeIgniter, однако после изучения Java и замечательных функций, таких как интерфейсы, абстрактные классы, пакеты, и того, что PHP 5 также поддерживает большинство из этих функций, я готов закончить и построить реальная OO-инфраструктура в PHP, которая использует все эти функции (включая пространства имен), поэтому я могу создавать гораздо более элегантные проекты.

Я имею в виду, что вместо того, чтобы все в системе разделяло один $this-> объект, как это сделано в CodeIgniter, например:

$this->load->model('box');
$this->box->something();

Чтобы загрузить модель Box и вызвать ее метод something(), нужно сделать следующее.

$box = new Framework\Models\Box();
$box->something();

или следующее

abstract class BaseController
{
   public function getModel($name)
   {
      $model = new Framework\Models\$model(); //Is this valid code?
      return $model;
   }
}

class MyController extends BaseController
{
    public function index()
    {
        $box = $this->getModel('box');
        $box->something();
   }
}

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

Ответы [ 4 ]

11 голосов
/ 03 октября 2009

Одна вещь, которую я заметил, это то, что фреймворк обычно создается для определенной цели. Общие структуры (такие как CodeIgniter) хороши для небольших сайтов и быстрого запуска. Однако, если у вас есть конкретные вещи, которые выходят за рамки общего построения, ваши собственные становятся реальностью.

Единственное, что я хотел бы предложить, это быть последовательным. Это неуклонно соответствует. Если вы решили назвать вещи в camelCase, не отклоняйтесь от этого. Или, если вы решите использовать соглашение NounVerb о методах именования, т.е. spaceJump, не переключайтесь на jumpSpace, даже если в тот момент это звучало лучше.

Выберите, как вы будете принимать параметры и будьте последовательны в этом. Будете ли вы принимать только параметры или ассоциативные массивы параметров? Выберите и придерживайтесь его.

Я бы тоже не переусердствовал, пока ты не написал что-нибудь. Непротиворечивость приведет вас довольно далеко, прежде чем вам понадобится рефакторинг ... но я бы не побоялся это сделать. (Модульный тест или два должны ослабить эти страхи).

Да, обычно нет правильного или неправильного способа делать вещи, если вы последовательны. Я упоминал ...

Будь последовательным!

5 голосов
/ 03 октября 2009

Требуется большой опыт для создания технической структуры (без обид), и уже есть 1 000 фреймворков / библиотек CMS / базовых объектов (управление сеансами, ORM и т. Д.).

Вместо того, чтобы тратить драгоценное время (больше без обид), вам лучше:

  1. Оцените и выберите среду, которая лучше соответствует вашим потребностям (у некоторых действительно хорошая ОО-архитектура).
  2. Учитесь, используя этот хороший фреймворк.
  3. Создайте свой собственный OO бизнес / приложение framework. (Здесь вы можете учиться, различать и создавать ценности).
4 голосов
/ 08 октября 2009

Вы можете создавать свои собственные, но почему бы не использовать обширные библиотеки, включенные в доступные инфраструктуры, и при необходимости расширить их функциональность.

Почему бы вам не взглянуть на Zend Framework?

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

http://framework.zend.com/

3 голосов
/ 14 октября 2009

Я бы посмотрел на Кохана . Он вышел из CodeIgnitor, и загрузка моделей и т. Д. Выполняется так, как вы предлагали.

Ознакомьтесь с их основными функциями, многие из которых имеют непосредственное отношение к вашему вопросу (я выделил их):

Чем отличается Кохана?

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

  1. Сообщество, а не компания, управляемая. Разработкой Kohana руководит команда преданных своему делу людей, которым нужна среда для быстрых и эффективных решений.
  2. Строгий PHP 5 ООП. Предлагает множество преимуществ: защита видимости, автоматическая загрузка классов, перегрузка, интерфейсы, рефераты и одиночные сообщения.
  3. Чрезвычайно легкий. Kohana не зависит от расширений PECL или библиотек PEAR. Большие монолитные библиотеки исключаются в пользу оптимизированных решений.
  4. Массивы GET, POST, COOKIE и SESSION работают как положено. Kohana не ограничивает ваш доступ к глобальным данным, но предлагает фильтрацию и защиту XSS.
  5. Истинная автозагрузка классов. Истинная загрузка классов по запросу, как они запрашиваются в вашем приложении.
  6. Нет конфликтов пространства имен. Все классы имеют суффиксы, позволяющие использовать одинаковые имена между компонентами для более согласованного API.
  7. Каскадные ресурсы предлагают беспрецедентную расширяемость. Почти каждая часть Kohana может быть перегружена или расширена без редактирования основных системных файлов. Модули позволяют прозрачно добавлять многофайловые плагины в ваше приложение.
  8. Драйверы библиотеки и согласованность API. Библиотеки могут использовать разные «драйверы» для прозрачной обработки различных внешних API. Например, доступны несколько вариантов хранения сеанса (база данных, cookie и собственный), но для всех них используется один и тот же интерфейс. Это позволяет разрабатывать новые драйверы для существующих библиотек, что обеспечивает согласованность и прозрачность API.
  9. Мощный обработчик событий. Обработчики событий в стиле наблюдателя допускают экстремальные уровни потенциала настройки.
  10. Быстрый цикл разработки. Быстрая разработка приводит к более быстрому реагированию на ошибки и запросы пользователей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...