Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Веб-программирование > PHP / MySQL

PHP / MySQL Создание динамических Веб-ресурсов

Ответ
 
Опции темы
Старый 21.08.2011, 01:46   #1
shybovycha
ПроЭктировщик
 
Аватар для shybovycha
 
Регистрация: 27.05.2007
Сообщений: 110
Написано 40 полезных сообщений
(для 33 пользователей)
mooFrame

Доброго времени суток, уважаемые!

По известным причинам (по большей части - Magento и фриланс) написал фреймворк на похапэ (блин, как последний школьник! (да простят меня последние)).

В чем же преимущество да и вообще уместность данного средства? mooFrame - прост, как дубина, но при этом достаточен для написания приложений чуть быстрее, нежели на голом похапэ или при использовании различных фреймворков вроде Magento, CodeIgniter, Cake PHP и иже для людей, не желающих в них разбираться (к последним я сам и отношусь - далее - подробнее).

Как-то давно; очень давно; очень-очень давно мне предстояло написать очередной сайт. С нуля и на похапэ (выбора хостинга у меня небыло). Поглядел на один фреймворк, поглядел на второй - ни один не радовал отсутствием необходимости разбираться менее часа. И тогда я написал сайт на "голом" похапэ, проект завалился, мне не заплатили, в общем все было плохо. Но не так давно я увидел Magento и по сей день с ним работаю. Если быть точным, то дорабатываю рашпилем известного калибра. Но как же радует глаз картина, когда любая страничка, практически статического контента содержанием грузится минуту а то и две!.. И вот тогда-то мне в голову начали заползать мыслишки навроде "надо сделать свое, теплое да уютное сЪредство". Прошло несколько недель и наконец я закоммитил на гитхаб ветку под названием "Alpha" (и даже гордо ей логотип прилепил, по-быстрому врезанный в Gimp'е под конец рабочего дня).

В чем же соль сего эпического творения? Ну вот создаете, к примеру, вы приложение на том же Cake PHP или Code Igniter. Что вы первым делом пишете из кода? Верно, что-то вроде `class MooController extends FooFrameworkControllerAbstract...`. А вот контора, которая вас попросила сделать ей сайт, сказала, что окромясь страничек "контакты", "о нас", "прайс-лист" да "главная" им ничего и не нужно. И вот для таких случаев у меня в голове ползало мыслишко "А зачем обязательно иметь класс для одностраничного контроллера?". И таким образом и появилось два правила у mooFrame: "если в файле контроллера есть класс - хорошо. Ну а если нету - не вопрос! Тогда мы просто выполним код этого файла!" и "не нужно ничего наследовать! Достаточно уже иметь обычный класс!".

Следующим нововведением стала система рендеринга. Дело в том, что в Magento, дабы вывести надпись "Hello, World!", вам необходимо создать блок, определить его в XML-файле, создать в нужном месте темплейт, унаследовать класс блока от Mage_Core_Block_Template (или как-то так) и в тимплейте вывести надпись любым доступным методом. Вот у меня и возникло теплое такое воспоминание о тех временах, когда я баловался RoR. И был произведен на свет класс Renderer с двумя методами (идентичными с виду) - render и partial. Оба работают совершенно одинаково (пока) и рисуют указанный файл с указанными параметрами (которые не нужно передавать из класса блока в темплейт посредством довольно-таки странного средства как "реестр Magento"). Но в отличие от моего стажерского подобия фреймворка, равно как и в отличие от RoR, в mooFrame не будет рендериться файл с именем вызванного Action или Controller - здесь вы сами хозяин того, что вы рендерите, а что - нет.

Связующим звеном стал роутер - класс, который принимает запросы пользователя/браузера и передает управление конкретному приложению, контроллеру или Action'у. В DocumentRoot сервера, по правилам mooFrame (по большей части из соображений безопасности) должен находиться лишь один файл - index.php, который передает управление роутеру в две строки кода. Роутер, в свою очередь, рассматривает запрос пользователя и переходит к выполнению одного из двух действий: выдаче содержимого файла и заголовка с его META-info или же поиску необходимого приложения или контроллера/действия (повторюсь, в mooFrame контроллер без класса - это то же, что и контроллер без действий - достаточная единица для передачи управления).

Стоит отметить и "множественность приложений" mooFrame: вы можете иметь несколько приложений с множеством своих собственных контроллеров. Указав в настройках орутинга конкретного приложения, на какие из запросов пользователя и как должно откликаться ваше приложение, вы можете запустить цепочку контроллеров/действий. Причиной сего стала схема роутинга Magento: дабы реализовать подобное у них (разработчиков Magento) есть два пути - определить роутинг "хардкодом" - явно указав, на какие запросы какой контроллер/блок будет вызван или же создав класс-listener (есть некоторое сходство с Java, как я понял) и "слушать" события, которые происходят. Проблемма лишь в том, что далеко не всегда будет "слышен" сигнал о выполнении какого-либо действия.

Последней плюшкой которую я отмечу в данном посте (по крайней мере - последняя, которую я сейчас способен вспомнить и описать) будет работа с базами данных. Для этого во фреймворке предназначен один класс с тремя методами - connect (соединяется с СУБД и возвращает локальное, уникальное, независимое имя соединения, которое и должно использоваться в двух других методах), query (выполняет запрос к указанному именем соединению; в запросе запрещено использовать строки в "чистом" виде - что-либо, указанное меж кавычек одинарных или двойных будет завершать работу метода) и forceQuery (в котором эти самые строки и разрешены). Все хапросы возвращают стандартные массивы стандартных хешей, у которых ключ - имя столбца таблицы. Работа с БД возложена на PDO. Изврат со строками был создан во избежание SQL injections. PDO - во избежание труда. Конечно же, Active Record - привлекательный, весьма даже привлекательный паттерн, но Magento с его реализацией оного моментально отбросила всякое желание реализовывать любые абстракции и модели для БД.

На этом пока закончу описание mooFrame. Детали по установке на Apache и исходные коды можно взять на GitHub.

В данный момент идет бурное обдумывание вопросов реализации модульности ядра, системмы и Store расширений и тестирования системмы (папочку test пока не глядите - файлы там очень уж out-of-date).

Из требований у mooFrame:
  • сервер с поддержкой перенаправления ВСЕХ запросов на index.php
  • PHP 5.1/5.2 и выше
  • PDO
  • (как оказалось) доступ к каталогу одного с DocumentRoot уровня - для размещения всех директорий фреймворка (окромясь www/, index.php откуда должен быть в DocumentRoot, а core/, app/, log/ [права у него должны быть равны a+w] и media/ - уровнем выше от index.php)
  • прямые руки (это - критично важно, как показывает практика!)
Буду крайне благодарен за найденные баги, пожелания, дельные советы, критику и опробывание mooFrame в действии.

На этом пока все. Всем (и себе - в том числе) желаю спокойной ночи.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (21.08.2011)
Старый 21.08.2011, 03:03   #2
cyberblut
Знающий
 
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений
(для 257 пользователей)
Ответ: mooFrame

Бл*, я даж не знаю чо сказать по этому всему поводу. Старания - это всегда похвально. Но...
В случае магенты одностраничность легко решается через CMS Pages и блоки или модули.
В случае моего любимого Yii пишется шаблон для генератора.
Если надо чо-то по быстрому, берём вордпресс/джумлу.
Нахуа этот велокостыль?
Если есть желание и силы, лучше направить их в какой-нить открытый проект типа того же Yii, пользы в разы будет больше. Или наследие Болконского работает?

---
Тем не мнее.
1. Почему в коде автор и дата не проставлены?
2. Почему говностиль написания кода?
3. Почему нет комментов и тегов для PHPDoc, не говоря уже о самой документации?
4. Зачем тебе тут ООП, если у тебя чисто процедурный подход?

Последний раз редактировалось Randomize, 21.08.2011 в 03:23. Причина: можно без матов?
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 11:01   #3
shybovycha
ПроЭктировщик
 
Аватар для shybovycha
 
Регистрация: 27.05.2007
Сообщений: 110
Написано 40 полезных сообщений
(для 33 пользователей)
Ответ: mooFrame

Сообщение от cyberblut Посмотреть сообщение
Бл*, я даж не знаю чо сказать по этому всему поводу. Старания - это всегда похвально. Но...
В случае магенты одностраничность легко решается через CMS Pages и блоки или модули.
В случае моего любимого Yii пишется шаблон для генератора.
Если надо чо-то по быстрому, берём вордпресс/джумлу.
Нахуа этот велокостыль?
Если есть желание и силы, лучше направить их в какой-нить открытый проект типа того же Yii, пользы в разы будет больше. Или наследие Болконского работает?

---
Тем не мнее.
1. Почему в коде автор и дата не проставлены?
2. Почему говностиль написания кода?
3. Почему нет комментов и тегов для PHPDoc, не говоря уже о самой документации?
4. Зачем тебе тут ООП, если у тебя чисто процедурный подход?
Писать на Magento нечто простое - фейл по умолчанию. Насчет иных фреймворков/движков ответ схож: тяжело для сервера, долго ставить/настраивать/разбирать особенности.

Код документировать вроде и не собирался.

По поводу остальных вопросов - RTFM, еды я вам не дам.
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 11:24   #4
cyberblut
Знающий
 
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений
(для 257 пользователей)
Ответ: mooFrame

Сообщение от shybovycha Посмотреть сообщение
Писать на Magento нечто простое - фейл по умолчанию. Насчет иных фреймворков/движков ответ схож: тяжело для сервера, долго ставить/настраивать/разбирать особенности.

Код документировать вроде и не собирался.

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

Да никто троллить не собирается. Мне реально интересно узнать ответы.
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 11:33   #5
shybovycha
ПроЭктировщик
 
Аватар для shybovycha
 
Регистрация: 27.05.2007
Сообщений: 110
Написано 40 полезных сообщений
(для 33 пользователей)
Ответ: mooFrame

Сообщение от cyberblut Посмотреть сообщение
На магенто никто ничего простого и не пишет, я надеюсь. Просто если надо ещё дополнительно это простое заиметь, то решается как я описал ниже.
Фреймворк и не позиционируется как замена Magento "в некоторых местах" - явно ж сказано, что "под воздействием Magento...".

Да никто троллить не собирается. Мне реально интересно узнать ответы.
Ну, коль так, тогда here you are:

Нахуа этот велокостыль? Если есть желание и силы, лучше направить их в какой-нить открытый проект типа того же Yii, пользы в разы будет больше. Или наследие Болконского работает?
Смысл вопроса увидел лишь в первом предложении. Фреймворк создавался с расчетом на мои потребности, что вы можете увидеть в README и на вики. Повторюсь, разбирать внутренности/особенности чего-то нового желания и времени у меня нету (особенно, когда на проект выделяется неделя, из которой пять дней - рабочие). А mooFrame - по сути своей лишь крутой апдейт моего стажерского проекта.

Почему в коде автор и дата не проставлены?
На стадии, когда (работо-/жизне-)способность проекта под вопросом это явно не нужно. Ведь кроме двух-трех друзей его навряд кто будет смотреть в данном временном промежутке. А с другой стороны - опять-таки, README says "for my personal needs".

Почему говностиль написания кода?
Толсто же.

Почему нет комментов и тегов для PHPDoc, не говоря уже о самой документации?
Опять ссылаюсь на альфа-тестирование.

Зачем тебе тут ООП, если у тебя чисто процедурный подход?
Будьте добры, сперва исходники-то почитайте, а уж затем вбрасывайте.

Последний раз редактировалось shybovycha, 21.08.2011 в 11:35. Причина: вброс по поводу Magento
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 11:49   #6
cyberblut
Знающий
 
Регистрация: 14.06.2009
Сообщений: 338
Написано 139 полезных сообщений
(для 257 пользователей)
Ответ: mooFrame

Сообщение от shybovycha Посмотреть сообщение
Будьте добры, сперва исходники-то почитайте, а уж затем вбрасывайте.
Потому и спросил. Log, Router, Renderer, Database - это ведь не классы по сути, а сборники процедур. Вынеси все методы просто в файлы и допиши глобальные переменные и ничего не поменяется ну вообще никак.
Database и Application должен быть синглтоном. Log, Router, Renderer - либо обычными классами как адаптеры, либо тоже синглтонами.

И если это нужно ТОЛЬКО тебе фо персонал пурпосес, то нафига было писать?
Буду крайне благодарен за найденные баги, пожелания, дельные советы, критику и опробывание mooFrame в действии.
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 12:05   #7
shybovycha
ПроЭктировщик
 
Аватар для shybovycha
 
Регистрация: 27.05.2007
Сообщений: 110
Написано 40 полезных сообщений
(для 33 пользователей)
Ответ: mooFrame

Потому и спросил. Log, Router, Renderer, Database - это ведь не классы по сути, а сборники процедур. Вынеси все методы просто в файлы и допиши глобальные переменные и ничего не поменяется ну вообще никак.
Database и Application должен быть синглтоном. Log, Router, Renderer - либо обычными классами как адаптеры, либо тоже синглтонами.
Не согласен - инкапсуляция, сударь, инкапсуляция! Глобальные переменные и функции - это, безусловно, существующий подход, но:

а) он морально устарел
б) используется в основном (если не исключительно) необразованными разработчиками
в) имеет множество недостатков (так, коль будет определена функция log(), возникнет довольно-таки хороший конфуз у интерпретатора; а коль называть функции logErrorMessageIntoFile() и иже - тогда возникает сомнение в необходимости разработки фреймворка; с другой стороны, глобальные переменные имеют точно такой же набор проблемм)

Синглетонами Log, Renderer и Router быть смысла нету - это static classes (жаль, что похапэ не имеет понятия о таком). У них и объектов-то быть не должно. Зато благодаря сему имеем два профита:

1) избавляемся от юродливых неймспейсов похапэ
2) разрешаем конфликты имен

Database и Application - два совершенно разных класса. Первый имеет сугубо абстрагированный функционал, посему он, как и Log, тоже статичен. А Application - наоборот, работает с внутренностями конкретного приложения, посему есть "обычный класс".

Я ж просил почитать исходные коды, а не имена файлов...

И если это нужно ТОЛЬКО тебе фо персонал пурпосес, то нафига было писать?
Дабы проверить наличие багов, расширить функционал, удостовериться в удобности для кого-либо еще окромясь меня. Да, про критику, пожалуй, писать было излишне...

И все равно - благодарю за дискуссию!
(Offline)
 
Ответить с цитированием
Старый 21.08.2011, 18:29   #8
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: mooFrame

Сообщение от cyberblut
Database и Application должен быть синглтоном.
УМОЙСЯ!
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com