Как расширить основные классы в фреймворке - PullRequest
0 голосов
/ 31 января 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

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

Насколько важно, чтобы все базовые классы были расширяемыми и как это можно сделать?

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

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

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

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

Перед тем как приступить к выпуску своего кода, примите во внимание следующее:

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

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

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

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

0 голосов
/ 01 февраля 2011

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

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

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

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

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

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

Подробнее: http://framework.zend.com/manual/en/zend.db.table.html

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