ProDomainer.ru - Клуб Домейнеров  
     

Войти через OpenID
Left Nav Справка ПортфолиоАукцион (39) Календарь Поиск Сообщения за день Все разделы прочитаны Right Nav

Left Container Right Container
 
Старый 26.09.2012, 19:23   #1
Член Клуба ProDomainer.ru
 

Растет детка.....

Признал пхп5.3 как факт...
После этого стал замечать, что вещи которые я хочу реализовать уже есть в ядре пхп. Сегодня вот открыл для себя spl_autoload_register.
Вот буквально сегодня записал в 2DO написать механизм расширения автозагрузки ибо модули могут генерировать некоторые классы "на лету"....
(хочу отойти от автогенерации кода, сохранив гибкость.... вот не нра мне когда миллион строк кода, а все дефолтные... хочу чтобы был только тот код который изменяется...)

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 27.09.2012, 03:39   #2
Член Клуба ProDomainer.ru
 

Да, РНP 5 даже посравнению с 4-й версией - большой скачок. Много функций, удобно работать, как с фреймворком будто бы.

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 27.09.2012, 17:49   #3
Член Клуба ProDomainer.ru
 

Кстати по SPL я статейку на хабре накатал.

Добавлено через 56 секунд
ПЫСЫ: примерчик чур фанатам Гундяева не читать

Добавлено через 57 минут
Пасаны, кто-то статью читал?
судя по циферкам и комменту получается что либо заметная часть людей ограниченна и не понимает предмет, или я тупой и не могу объяснить или таки у меня как всегда езда на костылях и правильно все совсем иначе....

Добавлено через 44 секунды
Черт. Только сейчас дошло что могли минусануть и за Гундяева. Слишком маленькая выборка чтобы делать выводы

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 27.09.2012, 20:58   #4
Член Клуба ProDomainer.ru
 

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

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 27.09.2012, 21:50   #5
Член Клуба ProDomainer.ru
 

Ок, не вопрос.
Там достаточно примеров - бери любой и предложи более правильное решение.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 10:46   #6
Член Клуба ProDomainer.ru
 

Я о изменении 30ти классов. Если их мало, годится и наследование с перегрузкой, если их много - архитектура стремная. Как-то так..

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 12:59   #7
Член Клуба ProDomainer.ru
 

Т.е. статью не читал. Как и комменты. Ну ок, на нет и суда нет.

Добавлено через 27 минут
Саш, не обижайся, но когда говорят о "неправильная архитектура", не предлагая вариантов становится как-то обидно

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

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 13:20   #8
Член Клуба ProDomainer.ru
 

Я читал. Глянь как в yii реализован class_map. Я сам не знаю, возможно даже так же. Но сам факт того, что в юии возможность такая есть говорит о допустимости архитектуры. Да и варианта лучше я лично не вижу.


VaseninM вне форума   Ответить с цитированием
Старый 28.09.2012, 13:39   #9
Член Клуба ProDomainer.ru
 

ну тут только на карту влияет. систмные библиотеки так не перегрузить....
Но глобально по поводу "неправильное проектирование" ход мыслей верный.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 15:17   #10
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от Mendel Посмотреть сообщение
Т.е. статью не читал. Как и комменты. Ну ок, на нет и суда нет.

Добавлено через 27 минут
Саш, не обижайся, но когда говорят о "неправильная архитектура", не предлагая вариантов становится как-то обидно

Я конечно хороший телепат, но придумать идеальную архитектуру под ТЗ которое будет написано лет через семь после того как я закончу свой проект как-то сложно.
Ну признаюсь по диагонали читал. Тяжело мне читать о какой-то проблеме, пусть глубоко расписанной но не моей )
Но суть наверное в "Иногда очень хочется переопределить поведение класса родителя, не меняя его код."
так вот, решение с наследованием и перегрузкой методов мне нравится - его предложил первый комментер, на что был ответ о 30 классах, которые наследуют от класса который хочется переопределить. Так вот в этом случае мне пришла мысль о неверной архитектуре, потому что, не обижайся Макс, но это бред использовать что-то, что изначально работает так, но хотеть чтобы оно работало по другому

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

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 15:56   #11
Член Клуба ProDomainer.ru
 

Drupal выращиваете? Там тоже хуки - до, во время работы функции и по завершении, такого натворить можно...


Шуранов вне форума   Ответить с цитированием
Старый 28.09.2012, 16:06   #12
Член Клуба ProDomainer.ru
 

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

Саш, я там раз шесть приводил РАЗНЫЕ примеры о том зачем это может понадобится.
Смысл в том, что я пишу фреймворк. А что именно понадобится завтра кому-то я не знаю, и не хочу знать.... схема которую я предложил позволяет упростить изменение там где оно наиболее вероятно, но это не ограничивает тебя только этими местами.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 16:31   #13
Член Клуба ProDomainer.ru
 

Мож я слепой )) Не нашел примеров когда это может понадобиться в статье. Ну ок, ты пишешь framework, у которого будут определенные задачи. Например с его помощью можно будет создать приложение для автоматизации процесса документооборота в предприятии. И задача состоит в том, чтобы дать возможность разработчику переопределить твой класс Document, ну или там класс File, так, чтобы например при каждом обращении к файлу (например чтению File->read($filename); ), скидывалось сообщение в лог. В этом конкретном примере лучше всего использовать хук (порог вхождения для событийной модели предельно низкий, потому что она естественная, реализация тоже простая), но ок, нам надо дать возможность пользователю переопределить наш класс File, в свой класс MyFile. Наследование и перегрузка его спасут.. Так я понял.. Надо придумать какой-то покруче пример.... Какой?)))

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 16:47   #14
Член Клуба ProDomainer.ru
 

Понятия не имею....
Завтра надо будет менять не документ а приказ. Или служебку.
Или только те служебки у которых автор является сотрудником "Секретного Отдела"...
Или Шаблоны в базе хранить...
Или это будет скрипт блогохостинга и для каждого домена надо будет свой дизайн загружать....
Мультиязычность сделать надо будет...
Изменить удаление документов на пометку как удаленные...
Не только документов,но и служебных справочников/настроек...
Не только настроек, но и для шаблонов тоже сделать антиудаление...
Не только антиудаление но и версиозность документам сделать...
Как ты понял не только документам....
Перенести хранение базы с мускула на Оракл...
Нее.. не всей базы. Шаблоны пусть в sqlite хранятся а данные в оракл.. Ну и админки все продолжают работать конечно...
Нее... не всю базу в оракл. вот эти восемьдесят таблиц в оракл, а вот эти пять оставим в мускуле, у нас соседний скрипт тоже ими пользуется.
У нас теперь движок биллинга будет находиться на одном сервере, а интерфейс на другом.... общаться будут через АПИ которое CRUD так что врапер вместо базы туда встроить не проблема... админка даже не заметит....
У нас хайлоад, а давайте ка сделаем наш шаблонизатор полукомпилируемым и с хранением кэша в памяти...
Ну и в шаблонизатор добавим функционал некоторый внешним модулем, пока новая версия ядра не вышла....
У нас кстати оказалось что кэширование можно сделать умное - связь между отслеживаемыми данными и их изменением в половине шаблонов довольно тривиальная, давайте будем удалять кэш при изменении (как у форумов)....
Есть идея - давайте сделаем умный профилировщик базы, он будет вести некоторую статистику запросов, и потом автоматом изменять структуру базы для ускорения... Ну да, чтобы сразу для всех наших баз работал, ему ведь пофиг в sqlite оно лежит или в майскуле или в оракле?

Готов везде хуки делать?
Я нет
И это помимо всех очевидных переопределений документов и т.п.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 16:56   #15
Член Клуба ProDomainer.ru
 

Хм, ну ок, а почему наследование и перегрузка методов не катит?

Добавлено через 54 секунды
Но ваще разве ты не слышал о том что всего не предусмотришь?))

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 17:01   #16
Член Клуба ProDomainer.ru
 

Наследование и перегрузка ЧЕГО?
все эти классы уже по тридцать раз наследованы.
Чтобы наследовать и перегружать нужно изменять прикладной код который уже написан. И его может быть ОООООЧЕНЬ много... особенно если есть куча типовых модулей в репозитории и все подходят. Только один нюанс - в этих восбмидесятипяти модулях надо везде имя класса переделать на имя класса родителя.....

ПЫСЫ: И не надо мне про указание класса переменной говорить.... Этот сценарий я тоже продумывал - громоздко получается, хотя и более "чисто". Ну и непонятно простым смертным....

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 17:14   #17
Член Клуба ProDomainer.ru
 

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

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 17:28   #18
Член Клуба ProDomainer.ru
 

Ну тут два варианта - или делать максимально управляемые и красивые костыли (как у меня), или заранее все подготавливать к возможным (гипотетическим и заранее неизвестным) изменениям. Второй вариант будет таскать за собой много лишнего которое у 95% пользователей никогда не будет использоваться.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 17:38   #19
Член Клуба ProDomainer.ru
 

Так ну можно сделать как в Yii )) есть массивчек, в котором определятеся иерархия классов и чтобы решить нашу задачу надо будет просто поправить этот массив. Ну типа:
$classMap = Array(
'File'=>Array('source'=>'classes/file.php'),
'Doc'=>Array('extends'=>'File', 'source'=>'classes/file/doc.php')
);
Ну и чтобы переопределить работу Doc (заменить File на MyFile например) надо $classMap['MyFile'] = Array('extends'=>'File','source'=>'myclasses/myfile.php'); и $classMap['Doc']['extends'] = 'MyFile';

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

Вот, но это ты наверное и имел в виду когда писал "про указание класса переменной".. )

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 17:43   #20
Член Клуба ProDomainer.ru
 

Ну да, как одно из решений.....
Но оно тяжеловато.
Хочу чтобы основной код был прост.
Хочу чтоб костыли были у тех кому они нужны, а не у всех, на случай что кому-то они понадобятся.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 17:46   #21
Член Клуба ProDomainer.ru
 

Ну можно еще все это обернуть в объект где и будет загрузчик и где будет функция переопределения иерархии

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 17:57   #22
Член Клуба ProDomainer.ru
 

Ненавижу неоднозначности и непрозрачности...
Ненавижу когда пишут
PHP код:
$sql 'select * from '.$_get['module'].' where id ='.$get['id']; 
Потому что где-то кто-то и когда-то прописал эскейпинг данных в гет по умолчанию, и фильтрацию списка разрешенных вариантов в стандартных полях...
Вот ненавижу я этого
И да, в se3 несмотря на такие фильтрации все равно полно sql-инъекций.
Ненавижу хотя-бы даже потому что у меня сейчас в ядре всего 32 класса. Но я уже успел поймать зацикленную рекурсию которую сутки вылавливал.... И это мой проект который я строю с нуля, в котором я удалил весь расширенный функционал (Уже реализованный в старых модулях), чтобы просто проще было ориентироваться...

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 18:03   #23
Член Клуба ProDomainer.ru
 

Ну как бы есть же документация.. )) Но ок

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 18:04   #24
Член Клуба ProDomainer.ru
 

Документацию читают только трусы...
Нет, не так.
Вот так:
Документацию пишут только трусы!
ВотЪ

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 18:05   #25
Член Клуба ProDomainer.ru
 

)))) ок )

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 18:56   #26
Член Клуба ProDomainer.ru
 

Вообще да, вопрос "плохая архитектура" существенный.
Лет пять назад пошел по одному пути, не очень удачному... решил что это влияет только на скорость, тогда было не критично, забил...
Сейчас писал кое-что на базе того кода...
После некоторых изменений оно стало уже критично и кривовато.
Решил что раз код уже готовый, то я его запущу, а потом уже переделаю....
Записал в 2DO подальше....
Сейчас уже третья кривость полезла.
Плюнул, переписал все по новому.
Реально потери в два дня.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 19:01   #27
Член Клуба ProDomainer.ru
 

А есть некое ТЗ на все это дело (несекретное, чтобы можно было глянуть), интересно стало )

Добавлено через 9 секунд
?

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 28.09.2012, 20:30   #28
Член Клуба ProDomainer.ru
 

Саш, я ж сказал что документацию пишут только трусы
А если серьезно, то у меня в голове несколько этапов того что я хочу, и ТЗ формируется под ногами идущего.....
В двух словах оно звучит как:
1 - MVC-framework с низким порогом вхождения
2 - максимально автоматизированное решение задач работы с CRUD-объектами.
3 - минимум дефолтного кода. Ты пишешь только то что хочешь реализовать....

Идея в том, чтобы для создания класса объектов которые тупо отражаются в базе тебе надо было просто создать соответствующую структуру в базе (в идеале нашими же средствами), а потом просто сделать скажем так:
PHP код:
$crud = new mysql_Table('broker');
$admin = new crud_admin($crud);
$admin->go(); 
Ну а если ты хочешь чтобы у объекта было две таблицы, скажем вторая с комметнарием, то ты бы сделал:
PHP код:
$crud = new mysql_Table('broker');
$admin = new crud_admin($crud);
$admin->go();
//
$crud = new mysql_Table('comment');
$admin = new crud_admin($crud,'comment');
$admin->go(); 
И всё.
crud_admin уже сам обрабатывает все GET параметры или параметры из адреса...
Он сам определяет какие там были переданы номера страниц, сортировку...
Какое действие было вызвано (создание, удаление, просмотр, редактирование) и т.п.
а также определяет какой параметр к какому экземпляру нашего админ-класса относится.....
Если передать crud_admin crud у которого нет какой-то функции (например у списка баз у нас нет редактирования - только создание, удаление и список), то он автоматом это узнает и не выводит ненужные ссылки....
Что такое CRUD в моем понимании ты уже видел... библиотеку я выкладывал.
crud_admin в черновом варианте уже реализован, но я его буду полностью переписывать: он работает только на GET, а не ЧПУ он корявый и совсем не поддерживает шаблонизации и т.п.

В первом целостном варианте будет работать примерно как я описал.
Дальше будет сделан визуальный интерфейс для создания таких классов и структур данных....
Потом будет более высокоуровневый ORM как надстройка над текущим.

На данный момент реализован первый вариант ORM - на 90% (останется в релизе наравне с DAO у которого есть прямой вызов SQL - для "низкоуровневых" задач, т.е. не будет отменен новым двигом).
Реализована общая структура каталогов, разная общая обвязка и т.п.
Новый шаблонизатор реализован на 70%. У него принципиально другая идеология - выводятся не скалярные данные а прямо объекты, которые уже могут делать скаляры.... в результате одно усложнение синтаксиса, два упрощения, и куча дополнительных фишек. В частности если для класса нет класса его вывода в шаблон (т.е. подходящего вьюва), то берется список всех классов от которых он наследует, всех интерфейсов которые он реализует (если есть хоть какой итератор стандартный, то его уже можно вывести) и т.п. и для них уже ищется вьюв. Если и таких не найдется (хотя я слабо представляю что такое может кому понадобится вывести в моем фреймворке что не итерабельно и не имеет выводимых родителей/интерфейсов) - выведем его вар_дамп.....

В общем я сейчас доведу вьюв до работоспособного состояния, а дальше буду делать:
1 - нормальную версию класса crud_admin.
2 - механизм обработки ошибок и исключений.
3 - систему пользователей и прав.

Думаю когда добью вьюв и crud_admin выложу тут на посмотреть.

Добавлено через 57 минут
Знаешь в чем прикол? Сложно не написать, сложно придумать что писать и т.п.
В общем жопой чую что скорее всего будет как с истио и адвего

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 28.09.2012, 23:39   #29
Член Клуба ProDomainer.ru
 

Цитата:
Сообщение от Mendel Посмотреть сообщение
Добавлено через 57 минут
Знаешь в чем прикол? Сложно не написать, сложно придумать что писать и т.п.
Согласен полностью

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

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

http://rudevich.com
Александр вне форума   Ответить с цитированием
Старый 29.09.2012, 00:23   #30
Член Клуба ProDomainer.ru
 

Я на него давно смотрю. Но он не для масс.
Прельщает возможность миграции кода с клиента на сервер и обратно.
Но пхп есть везде. Так что пока мы не корпорация добра - пользуемся общепринятыми стандартами....

Я вообще задумываюсь о том, чтобы в перспективе отобрать подмножество пхп операторов/функций которые "разрешены", и сделать возможность писать на том языке который тебе нравится - мало кто знает, что в 1с можно писать if then на равне с "если то"...
Информация доступна только членам Клуба :
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.


Но для начала надо хоть что-то работоспособное сделать

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
Быстрый переход


Часовой пояс GMT +4, время: 06:51.