bearman: ...что можно реально НАСЛЕДОВАТЬ, ФАБРИКОВАТЬ в сайтостроении? в голову приходят только вещи вида адаптер для доступа к бд, больше с лету ничего припомнить не могу ... конечно все зависит от архитектуры вебприложения/сайта, ООП повышает хакоустойчивость сайтов имхо.
Примеры? Пожалуй, TreeStructure - как пример. Добавление/удаление Items/Nodes (одинаковые методы - только вот разные таблицы, которые можно переопределить при наследовании). Сюда попадают все нециклические деревья: категории/статьи, категории/картинки, категории/видео и т.д... Вот вам и наследование... =)
Довольно удачно в этом смысле построен vbulletin :
Все важные интерфейсы обернуты в классы, но сами странички в процедурном стиле. Поэтому расширения растут как на дрожжах. Там и разбираться то особо не надо: ищи похожее расширение и копируй вызовы объектов.
Аха, и количество функций растет, перекрывая десятки раз то, что уже было написано. Где же оптимальность процедурного подхода?
netwind: asserte, тут одни уже доабстрагировались.
Жил был себе такой проект gallery2 и являлся лучшим в своей нише по набору фич. Недавно он объявил о закрытии старой ветки и переписывании с нуля : http://gallery.menalto.com/gallery_3_begins
А разгадка одна - увлечение ООП. Структура настолько сложна, что новичок не может написать дополнение или расширение. Такой GPL проект развиваться быстро не сможет. И, тормозит он, кстати, дай дорогу ( посмотрите wishlist).
Тормозит он дико из-за неверной архитектуры БД. Можете посмотреть на досуге - сам сталкивался. А еще не забываем о том, что он с графикой работает - это ресурсоемкие операции. (если мы про админко и операции с изображениями).
Насчет расширений... А вот тут уже вопрос не ООПрограммирования и не ООПроектирования. Тут архитектурное проектирование задействовано.
Я что-то очень сомневаюсь, что они на процедурном напишут =)
А по теме "доабстрагировались" - не означает, что на каждую сущность системы надо по 20 оберток писать. Я к адаптерной системе в 2 обертки пришел. Ничего - шустренько работают системы (профайлинг показывает, что основные 90% - это СУБД). Не стоит говорить о ООП как о сильно тормозящем системы подходе. Системы можно тормозить еще и циклами :)
Devider, Снова вы на конкретные реализации привязываетесь... Вам ли не все равно, как будут кешироваться конфиги: пофайлово, поштучно или вообще генериться в нативный php-код? )
Учитесь абстрагироваться от кода - это для меня важнейшее качество ООП-подхода. Почитайте банду четырех - вообще летать будете, когда начнете применять паттерны ;)
bearman: для конфигов столько е**и. мазохисты рулят видимо. имхо все это ООП ради ООП.
Напомнило "Я пони. Обоснуйте". Доказать можете, что ооп здесь не нужен? Чтобы вас уверовать в жизнь - приведу пример своей реализации системы конфигурации:
A_ConfgInterface - интерфейс
A_ConfigAPI - Адаптер для работы с конфигами
A_ConfigFabricanto - фабрика объектов конфига.
Приступим? =)
<?php
$Config = new A_ConfigAPI();
$Config->extract('configName', 'database', 'tablename'); // АPI запускает фабрику объектов с сигналом 'database', просматривая перед этим наличие кеша. Ложит в свой стек имя полученого конфига, регистрирует в диспетчере
$Config->extract('configName2', 'fs', 'app::configs::users'); // То же самое. Только фабрика инстанциирует другой объект работы с конфигом, который так же имплементирует A_ConfigInterface
// На этапе использования, где-нибудь в классе Users $this->_configs = Dispatcher::getObject('userConfig'); // Все, готово к использованию. Улыбаемся и машем машем и улыбаемся
Чем полезен такой подход:
При serialize(Dispatcher::getInstance()) можно и нужно проверять типы объектов, хранимых внутри. Ложить все конфиги в единый файл (почти нативное кеширование получается). При wakeup - просто заполнять объект данными из массива.
В случае с глобальным конфигом - нужно еще понимать, что у тебя в глобальной перменной можно кешировать, а что нет... Как понять? На уровне объектов - все просто:
xant: Интересный топег, только не сказано самого главного. Для каждой ситуации - свои методы. Если вам просто нужно вставить чуть-чуть динамики в уже готовую HTML страницу - никакой ООП там не нужен.
Название топика, если что: "Зачем нужны классы в php". Тут никто не спорит о том, какой подход лучше.. Скорее - как можно применять ;)
Devider: Не совсем понимаю о чем вы. Что тут забывать? Как это состыкуется с тем, что я говорил про настройки?
А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...
Пример в студию, каким образом вы будете держать 5 открытых подключений в одной переменной!
Спорим, не обойдется без массива? =)
Самое страшное заключается в том, что мощнейшую волну быдлокода нужно ожидать с выходом шестерки... Ой чего с неймспейсами и лямбдами будут творить - даже представить страшно (
Один из вариантов развития - использование неймспейсов в качестве оболочки для функций (читай - "альтернативы" статическим классам). Вот когда нужно будет показывать уличную магию, чтобы понять как это работает :-D
Что значит "тру"? ООП - он или есть, или его нет. Если нужно гарантировать один экземпляр класса - чем не путь? Земеттье, я употребляю исконно "ООП-термины". А как насчет геттеров/сеттеров? Они не нарушают Ъ концепции? Ведь данные в итоге оказываются "вне объекта". Тоже не Ъ? Другое дело - использование мощи ООП или пародия "для удобства".
Если уж на то пошло - ткну в противоречие между наследованием и инкапсуляцией. Слышали о таком? =)
UPD: что-то на ум упало... А ведь 99% разрабов начинают использовать классы и объекты как "контейнеры" для функций. Чтобы с именованием не путаться... Надо опрос устроить - сколько человек так начало свой путь к ООП ;)
Или копать в сторону zlib из phpMyAdmin - самый простой путь. И юзается во многих приложениях...
А еще можно использовать exec (если хостер позволяет ;))
...что можно реально НАСЛЕДОВАТЬ, ФАБРИКОВАТЬ в сайтостроении? в голову приходят только вещи вида адаптер для доступа к бд, больше с лету ничего припомнить не могу ... конечно все зависит от архитектуры вебприложения/сайта, ООП повышает хакоустойчивость сайтов имхо.
Примеры? Пожалуй, TreeStructure - как пример. Добавление/удаление Items/Nodes (одинаковые методы - только вот разные таблицы, которые можно переопределить при наследовании). Сюда попадают все нециклические деревья: категории/статьи, категории/картинки, категории/видео и т.д... Вот вам и наследование... =)
Довольно удачно в этом смысле построен vbulletin :
Все важные интерфейсы обернуты в классы, но сами странички в процедурном стиле. Поэтому расширения растут как на дрожжах. Там и разбираться то особо не надо: ищи похожее расширение и копируй вызовы объектов.
Аха, и количество функций растет, перекрывая десятки раз то, что уже было написано. Где же оптимальность процедурного подхода?
Впрочем, холливар =)
Интересно конечно, но API для своего кода, я так понимаю - нельзя посмотреть, ибо CORE закрыт.
ЗЫ: а что такое
В CUser::authenticate() ? :-D
После этого ВТРОЙНЕ интересно, почему код закрыт. Чесслово... Странные штучки-дрючки )
asserte, тут одни уже доабстрагировались.
Жил был себе такой проект gallery2 и являлся лучшим в своей нише по набору фич. Недавно он объявил о закрытии старой ветки и переписывании с нуля : http://gallery.menalto.com/gallery_3_begins
А разгадка одна - увлечение ООП. Структура настолько сложна, что новичок не может написать дополнение или расширение. Такой GPL проект развиваться быстро не сможет. И, тормозит он, кстати, дай дорогу ( посмотрите wishlist).
Тормозит он дико из-за неверной архитектуры БД. Можете посмотреть на досуге - сам сталкивался. А еще не забываем о том, что он с графикой работает - это ресурсоемкие операции. (если мы про админко и операции с изображениями).
Насчет расширений... А вот тут уже вопрос не ООПрограммирования и не ООПроектирования. Тут архитектурное проектирование задействовано.
Я что-то очень сомневаюсь, что они на процедурном напишут =)
А по теме "доабстрагировались" - не означает, что на каждую сущность системы надо по 20 оберток писать. Я к адаптерной системе в 2 обертки пришел. Ничего - шустренько работают системы (профайлинг показывает, что основные 90% - это СУБД). Не стоит говорить о ООП как о сильно тормозящем системы подходе. Системы можно тормозить еще и циклами :)
Devider, Снова вы на конкретные реализации привязываетесь... Вам ли не все равно, как будут кешироваться конфиги: пофайлово, поштучно или вообще генериться в нативный php-код? )
Учитесь абстрагироваться от кода - это для меня важнейшее качество ООП-подхода. Почитайте банду четырех - вообще летать будете, когда начнете применять паттерны ;)
для конфигов столько е**и. мазохисты рулят видимо. имхо все это ООП ради ООП.
Напомнило "Я пони. Обоснуйте". Доказать можете, что ооп здесь не нужен? Чтобы вас уверовать в жизнь - приведу пример своей реализации системы конфигурации:
A_ConfgInterface - интерфейс
A_ConfigAPI - Адаптер для работы с конфигами
A_ConfigFabricanto - фабрика объектов конфига.
Приступим? =)
Что получили?
1. Стандартный интерфейс работы с конфигурацией в системе. Не нужно помнить как работает система конфигурирования в ядре, а как - в приложении
2. Стандартный интерфейс для хранения и кеширования конфигураций
3. Стандартный интерфейс доступа к конфигам
4. Расширяемость за счет фабрики (XML/YAML/FTP/Oracle...)
5. Центральный валидатор конфигураций - A_ConfigAPI
Могу долго так продолжать... А в процедурном секса нас ждет, чтобы такое реализовать - мама не горюй (
Devider, я все-равно не понимаю, нахрена костыли...
Не проще сделать так:
Чем полезен такой подход:
При serialize(Dispatcher::getInstance()) можно и нужно проверять типы объектов, хранимых внутри. Ложить все конфиги в единый файл (почти нативное кеширование получается). При wakeup - просто заполнять объект данными из массива.
В случае с глобальным конфигом - нужно еще понимать, что у тебя в глобальной перменной можно кешировать, а что нет... Как понять? На уровне объектов - все просто:
Финита
-------------
Интересный топег, только не сказано самого главного. Для каждой ситуации - свои методы. Если вам просто нужно вставить чуть-чуть динамики в уже готовую HTML страницу - никакой ООП там не нужен.
Название топика, если что: "Зачем нужны классы в php". Тут никто не спорит о том, какой подход лучше.. Скорее - как можно применять ;)
Не совсем понимаю о чем вы. Что тут забывать? Как это состыкуется с тем, что я говорил про настройки?
А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...
Спорим, не обойдется без массива? =)
Самое страшное заключается в том, что мощнейшую волну быдлокода нужно ожидать с выходом шестерки... Ой чего с неймспейсами и лямбдами будут творить - даже представить страшно (
Один из вариантов развития - использование неймспейсов в качестве оболочки для функций (читай - "альтернативы" статическим классам). Вот когда нужно будет показывать уличную магию, чтобы понять как это работает :-D
asserte, имхо, синглтон - это не тру ооп
Что значит "тру"? ООП - он или есть, или его нет. Если нужно гарантировать один экземпляр класса - чем не путь? Земеттье, я употребляю исконно "ООП-термины". А как насчет геттеров/сеттеров? Они не нарушают Ъ концепции? Ведь данные в итоге оказываются "вне объекта". Тоже не Ъ? Другое дело - использование мощи ООП или пародия "для удобства".
Если уж на то пошло - ткну в противоречие между наследованием и инкапсуляцией. Слышали о таком? =)
UPD: что-то на ум упало... А ведь 99% разрабов начинают использовать классы и объекты как "контейнеры" для функций. Чтобы с именованием не путаться... Надо опрос устроить - сколько человек так начало свой путь к ООП ;)