Разработка микрофреймворка

claygod

Новичок
Здравствуйте!

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

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

Архив фреймворка - http://rumba.net.ru/download/rmfw/rmfw_036.zip
как он устроен в общих чертах - http://rumba.net.ru/new-micro-framework-php-rumba.html
сгенерированная документация - http://rumba.net.ru/download/rmfw/rmfw_036_docs.zip
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Стандартное замечание - код выложи на гитхаб.
Это совсем нетрудно, но без этого никто смотреть не будет.
 

hell0w0rd

Продвинутый новичок
а после публикации на гитхабе и packagist.org, сразу сравнение с Silex/Slim. Пока я вижу тучу синглтонов, а такого в ядре точно быть не должно.
 

Вурдалак

Продвинутый новичок
Нет, на packagist нужно регать только что-то адекватное.
 
Последнее редактирование:

claygod

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

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

AnrDaemon

Продвинутый новичок
Я считаю, что ядро, это как-раз те классы, у которых может быть только один экземпляр
А если мне приспичит стыковать два проекта с разными настройками, написанных с применением твоего фреймворка?… Синглетоны оправданы только там, где без них НЕВОЗМОЖНО обойтись.
 

С.

Продвинутый новичок
Да ладно докапываться. В конце концов это МИНИ-фреймворк. Специализацию и минимализм еще никто не отменял. Кроме того, надо быть абсолютно ленивым ублюдком, чтобы смерджить два проекта на одном фреймворке и не превести их к одному ядру.
 
Последнее редактирование:
  • Like
Реакции: AmdY

fixxxer

К.О.
Партнер клуба
Сейчас тексты комментов в файлах на руском языке, как переведу, выложу.


Четыре синглтона, если точнее. Я считаю, что ядро, это как-раз те классы, у которых может быть только один экземпляр, однако возможно, я заблуждаюсь, тогда прошу пояснить почему (не холивара ради).
Единственность инстанса должна обеспечиваться с помощью механизма управления зависимостями фреймворка.

Один экземпляр - какого класса? Твоего, или моего, который я отнаследовал от твоего, дописав мне нужное?
 

claygod

Новичок
От наследования можно защититься через объявление класса финальным (ИМХО, сам ни разу не финализировал класс). Остальные экземпляры (не синглтоны), создаются через фабрику, хотя конечно, можно и эти четыре (синглтона) создать через фабрику с особыми условиями (фабрика будет "знать", что эти классы - особые и не позволит сделать лишний экземпляр). При таком раскладе это конечно уже будут не синглтоны.
 

hell0w0rd

Продвинутый новичок
claygod, https://github.com/silexphp/Silex - посмотри на фреймворк. В основе лежит мааленький, но крутой DI-контейнер, который отвечает за то, чтобы экземпляр объекта был всегда один, все расширяется. Может быть тебе стоит просто сделать сборочку "под себя"?
 

claygod

Новичок
fixxxer, посмотрел твой класс по ссылке, вот вопрос, который мне не сильно понятен: к примеру у нас есть класс, который регистрирует резолвы, соответственно, КОГДА уместно, или наоборот, когда неуместно это делать. Кроме того, все ли классы ты инициируешь через этот сервис, или только ядро? Опять таки, насколько логично там же иметь возможность и регистрировать переменные, ведь совершенно спокойно возможен конфликт имён классов и переменных.
 

fixxxer

К.О.
Партнер клуба
claygod, там у меня 1 в 1 как в Pimple, только get/set/call-magic вместо ArrayAccess, соответственно, и использовать так же. Сервисы просто именуются, к реальным названиям классов никакого отношения нет.

Уместно ровно в тех же случаях, в которых уместны сервис-провайдеры в Laravel, DI в Symfony итд.
 

claygod

Новичок
А вы не пробовали делать через статический класс зависимости?
С одной стороны, менее гибко, с другой - легко реализуемо. $Container::get/set($attr);
 

fixxxer

К.О.
Партнер клуба
Это получится service locator, а не DI. Это плохо: зависимости надо инжектить в конструктор, а не бесконтрольно дергать откуда угодно.
 

Redjik

Джедай-мастер
Pimple только отложенную инициализацию не умеет =(
Уже размышляли об этом в другой ветке.
Типо когда контроллер как сервис, и мы внедряем обьект mailer, который может вообще не понадобиться, если рега не прошла.
Но это решаемо.

upd.
нашел - http://symfony.com/doc/current/components/dependency_injection/lazy_services.html
 
Последнее редактирование:
Сверху