2011-01-31 3 views
0

Я использую свою собственную платформу веб-приложений PHP 5.3, и я должен сказать, что с ней очень приятно работать. Я на самом деле думаю, что с открытым исходным кодом с ним и позволяю другим ощущать ту же радость, что и я;)Как расширить основные классы в фреймворке

Вот моя проблема. Насколько важно, чтобы все основные классы должны были расширяться, и что такое способ ? способ сделать это? Codeigniter использует одиночный шаблон EVERYWHERE, и это не может быть и речи. Файловая система Kohanas сладка, но включает в себя путь ко многим файлам (пустые классы) по моему вкусу.

Я никогда не использовал Symfony, но я слышал, что он использует Injection Dependency Injection? Я не гуру на эту тему, но имею некоторые знания. Это путь? Есть ли более «умный» способ?

P.S. Я использую PHP 5.3 с пространствами имен, закрытий и т.д.

/Тобиас (швед в разработке)

ответ

0

мне очень нравится то, как Zend Framework это сделать: Существует в основном абстрактный класс (продлить его) и конкретный класс (для конкретных случаев использования), например ДБ Mapper:

Вы можете расширить Zend_Db_Table_Abstract класс:

class Bugs extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'bugs'; 
} 

Или если вы просто нужны простые функции, вы можете создать новый Db таблица объектов таким образом:

$bugTable = new Zend_Db_Table('bug'); 
// Zend_Db_Table extends Zend_Db_Table_Abstract 

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

Дополнительная информация: http://framework.zend.com/manual/en/zend.db.table.html

2

Я хотел бы взглянуть на Symfony2, Lithium и Zend Framework, я думаю, что они являются лучшими в отношении дизайна. Я бы посоветовал не использовать синглтоны и вместо этого использовать инъекцию зависимостей.

Насколько важно, чтобы все основные классы должны были расширяться и что это хороший способ достичь этого?

Это действительно зависит от обязанностей классов. Возможно, вы не захотите, чтобы некоторые основные компоненты в вашем стеке MVC (при условии, что это MVC) были расширены, и вы могли объявить их окончательными или объявить определенные методы как окончательные и принудительные расширения через плагины и помощники. Другие классы, возможно, предназначены для расширения, и в этом случае их следует объявлять абстрактными.

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

Все, учитывая степень ответственности класса, если он обслуживает несколько ролей/целей, пришло время реорганизовать и разбить этот класс на слишком или несколько классов. И не забудьте использовать интерфейсы!

Я действительно думаю, что идти с открытым исходным кодом с ним и позволить другим чувствовать ту же радость, что я делаю;)

Перед тем, как идти высвобождая свой код во внимание следующее:

  • Проверено все мои модули кода?
  • Использовать контроль версий?
  • Есть ли у меня полная документация по API?

Ненавижу быть неудачником, но если вы ответили «нет» на какой-либо из этих вопросов, не беспокойтесь о том, чтобы открыть ваш код правильно, потому что никто его не будет использовать. Возможно, просто начните использовать GitHub для SCM. Также подумайте, что есть уже куча первоклассных фреймворков, зачем им использовать их вместо этого?

Также не забудьте прочитать Top ten reasons why I wont use your open source project.

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

+0

Я вижу вашу точку зрения, но это очень печально читать. Надеюсь, что у нас все еще есть некоторые «реинветеры», так что появляются новые проекты с открытым исходным кодом:/Я взглянул на Symfony2, Li3 и считаю, что инъекция зависимостей - это путь. Я уже начал интегрировать его, и он выглядит довольно неплохо. :) Спасибо за хороший ответ./Tobias – sandelius

+0

Не волнуйтесь, большинство разработчиков постоянно проходят этот этап, я тоже был там и, вероятно, снова на каком-то этапе. Это удручает, но это правда. Как я уже сказал, если вы хотите ОС, ваш проект просто начнет использовать GitHub, но не отправляйте выделенный веб-сайт для своей структуры. Fabien Potencier сделал хороший контейнер DI: [Pimple] (https://github.com/fabpot/Pimple), вы должны его проверить. – Cobby

Смежные вопросы