Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стоит ли заморачиваться с фабрикой классов? 
:(
    Опции темы
N0dwis
Дата 7.11.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 18.9.2007
Где: Луганск

Репутация: 2
Всего: 4



Пишу простенькую модульную cms. Все блоки и модули (в терминах php nuke) организованы в виде классов. Вопрос вот в чем, стоит ли городить что-то типа фабрики классов для более красивого создания объектов типа $a = $modules["class"]() или все-таки ограничиться простым include. 
У второго метода я нашел пока только один недостаток - вызывающий модуль не знает имени класса, который надо создать. В принципе решил проблему так - в вызываемом модуле, который содержит класс, заводится глобальная переменная и ей сразу присваивается ссылка на объект класса, содержащегося в этом модуле. Затем вызываемый код эту переменную использует. Что-то типа:

Код


a.php
class Module
{
   ...
}

$mod = new Module();


b.php
include("a.php")
$mod->.....


Но мне это кажется корявеньким.

Это сообщение отредактировал(а) N0dwis - 7.11.2007, 12:24
PM MAIL   Вверх
BuShaRt
Дата 7.11.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Какой-то непонятный вопрос.. Если нужно дружестенное API - заморачивайся... Если не нужно - не заморачивайся.
PM MAIL   Вверх
N0dwis
Дата 8.11.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 18.9.2007
Где: Луганск

Репутация: 2
Всего: 4



Ну да невнятно я выразился. В основном меня волнует производительность - для построения фабрики нужно ведь вначале получить список всех доступных классов и т.д. В общем, дополнительные операции.
Насколько это отразится на производительности? Оправдано ли будет с точки зрения удобство(программиста) / производительность.
PM MAIL   Вверх
flashaa
Дата 8.11.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Цитата(N0dwis @  8.11.2007,  14:39 Найти цитируемый пост)
Оправдано ли будет с точки зрения удобство(программиста) / производительность

Для удобства ООП и придумано. В больших проектах оно особенно полезно, при грамотном применении конечно. Цель ООП - сделать каждый фрагмент кода объявленным один раз, а использование многократное. ООП является конструктором для приложения, сначала собираешь все инструменты (объекты и интерфейсы), затем из них складываешь само приложение. Захотел что-то поменять - отредактировал ответственный за это класс, нашел ошибку - опять-таки исправил нужный класс и все работает.
В плане производительностии ООП часто хуже, чем написание программ "как есть". Но при грамотном, опять же, применении эта разница сойдет на нет. И главное не задрачиваться с объектами, хоть создатель ООП и писал что "все что может быть выделено в отдельный класс, надо выделить в отдельный класс" (примерно так), стоит делить на объекты в рамках твоей задачи. 
Например есть примеры программирования, где адрес, который можно представить в виде строки разбивают на члены класса индекс, город, дом, улица и тп. Или где можно перебрать объекты просто foreach, решают, что это не наглядно и пишут объект итератор на 4 страницы кода - кому это надо, непонятно.
Вообщем ООП хорошая вещь но если не страдаешь фанатизмом к ней.
PM MAIL   Вверх
N0dwis
Дата 8.11.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 18.9.2007
Где: Луганск

Репутация: 2
Всего: 4



Опять не совсем то, что я хотел услышать.  smile 
Я знаю что-такое ООП, опыт программирования на С++ / C# имеется.
В С++ программа компилируется, поэтому количество классов не отражается на производительности. Но поскольку PHP интерпретируемый, то для него это не так! А при реализации фабрики прийдется в любом случае подключать ВСЕ классы/модули, классы/блоки (ну в моей реализации), которые включены в систему. В том числе и те, которые в текущей генерации страницы использоваться не будут! Например у меня есть классы, реализующие новости, статьи, ссылки и т.п. В одной генерации будет по-любому использоваться только один модуль, но в фабрику включать прийдется все! (Хотя может и нет... ИДЕЯ! smile ).
Все, спасибо, вопрос кажется отпал, буду пытаться реализовать.

Это сообщение отредактировал(а) N0dwis - 8.11.2007, 16:48
PM MAIL   Вверх
flashaa
Дата 8.11.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Цитата(N0dwis @  8.11.2007,  16:40 Найти цитируемый пост)
В том числе и те, которые в текущей генерации страницы использоваться не будут!

Вообще-то есть __autoload ф-ция, она вызывается при инстанцировании неизвестного класса или при использовании его статического метода. В неё обычно помещают require_once  и никаких "всех" классов не надо.

доступна __autoload в PHP не ниже 5

Это сообщение отредактировал(а) flashaa - 8.11.2007, 16:48
PM MAIL   Вверх
N0dwis
Дата 8.11.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 18.9.2007
Где: Луганск

Репутация: 2
Всего: 4



Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.