[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Система инициализации компонентов.
Страницы: 1, 2, 3
twin
Ну вот, выбрал время продолжить.

Сделал работу с компонентами. Осталось впринципе роутер сделать и можно без оглядки клепать библиотеки. Немного подладил дебаггер, не до конца еще, но вполне наглядно. Там есть демонстрационная страничка.


Ну как, много нарушил канонов? Зеленкой запасся, каску одел. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
Razzwan
Николай, непонятно, что именно ты сделал. Ты бы ссылочку прямо на код, да с описаниями. Никто так рыться не будет.

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
twin
Там есть ссылка. :) Это как анекдот был про Илью Муромца - посыпь его мелом и дай мою палицу.

Там все полностью нужно смотреть. Сделал все по науке, по всем канонам ООП. Если кого смутит статический класс вместо bootstrap, то это просто оболочка для упрощения синтаксиса. Можно его вообще не юзать, писать на махровом ООП. А так вроде все фантики там есть. И куча паттернов, и все объектами и прочая лабуда.

И вот что интересно. Чем больше я вникаю в ООП, тем больше утверждаюсь в своей правоте. Ничего хорошего в нем нет. Половину времени я тратил на то, чтобы следить, как бы чего не нарушить. А ведь бОльшую часть того, что я там сделал, можно было совершенно безболезненно написать на статике. Не выдумывая, как извернутьбся, дабы это был объект.
А иногда и на процедуре. Допустим запуск трассировки можно было сделать функцией, и тогда можно было бы писать так:
dbg($bar);
А сейчас приходится так:
\Abc\Abc::dbg($bar);

Я уже не говорю о том, сколько шишек прилетело за автолоадер. Но это было уже выше моих сил, делать его классом.

Посмотрим что дальше будет. Пока не впечатлило. Очень скучно живут ООПэшники.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
twin
Принцип в общих чертах таков.
В ядре находятся скрипты управления библиотеками, ну и роутинг потом будет. Весь основной функционал в самодостаточных компонентах. При запуске формируется контейнер с функциями запуска интерфейсов. Эдакий сервис-локатор. Интерфейсы в либах однотипные, поэтому можно просто добавлять их по мере надобности.

Пока по дефолту собирается все, и по отдельности. Но потом, развивая идею, можно наделать билдеров (или как их назвать пока не знаю), которые будут собирать пачки компонентов, устанавливая их взаимодействие. Допустим тот же AR или миграции должны юзать компонент базы данных. Можно будет запустить эту пачку, а можно пользоваться нативным SQL. Главное оставить право выбора, без особого ущерба для ресурсов.

Сейчас компонент достать очень просто, вот так к примеру:

Abc::createNewApp();
$mysqli = Abc::component('MySQLi');

Или так, если кому претит статический синтаксис
        $abc = new AbcProcessor; 
$mysqli = $abc->getComponent('MySQLi');
Правда для этого нужно композер еще поставить.

Ну и так далее. :)

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
Invis1ble
почему Abc::createNewApp() @return object хотя ни единого return'а в коде метода нет?
почему такая неразбериха с отступами в коде?
/**
*
@var object
*/

protected static $abc;

а с регистром имен?
namespace ABC;
use \ABC\abc as Abc;
class Abc


не хватает AbC aBc abC и прочих комбинаций

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Invis1ble
createNewApp переводится как "создать новое приложение"
но если я 2 раза попытаюсь его создать, то получу исключение. Получается семантическая ошибка.
либо крестик сними метод переименуй, либо логику измени

PS. может это все оффтоп, перенеси куда надо, если что

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Угу, исправлю сии недочеты.

Вообще с Abc путаница потому что по задумке папки должны писаться в нижнем регистре, файлы - как классы (по законам PSR), начиная с заглавной. А скрипт запуска подключается простым инклюдом, от того ему привелегия, дабы не путаться в приложении. Но на самом деле не прав я оказался, сам вижу.

насчет отступов не понял... вроде везде 4 пробела. Или ты про аннотации?

Цитата
но если я 2 раза попытаюсь его создать, то получу исключение. Получается семантическая ошибка.
Так то да, но приложение должно быть одно на сайт по определению, и потому об этом красноречиво заявляет ексепшен. Хотя конечно, new можно убрать, хотелось почеркнуть принадлежность к ООП. biggrin.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
Invis1ble
Цитата (twin @ 20.10.2015 - 03:33)
Или ты про аннотации?

да, уж очень за них глаз цепляется

Цитата (twin @ 20.10.2015 - 03:33)
Так то да, но приложение должно быть одно на сайт по определению, и потому об этом красноречиво заявляет ексепшен.

ну назови его init()

Цитата (twin @ 20.10.2015 - 03:33)
Хотя конечно, new можно убрать, хотелось почеркнуть принадлежность к ООП.
twin
Цитата (Invis1ble @ 19.10.2015 - 23:39)
да, уж очень за них глаз цепляется

Вообще на этот счет нет стандартов вроде. У меня логика такая в этом отношении. Код пишется с отступами. Отступы, они как поля в тетрадке, можно использовать для заметок. А комментарии как раз заметки и есть.

UPD Да, посмотрел как у других. Исправлю тоже. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
Invis1ble
self::$abc = new self;

Позднее статическое связывание? Не, не слышал :)

        if (!empty(self::$abc)) {
throw new \Exception('Only one process');
}

Почему везде бросается \Exception ? Посмотри иерархию исключений в SPL. А еще лучше - создай собственное, подтип из SPL.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Цитата (Invis1ble @ 19.10.2015 - 23:39)
детский сад

Именно! smile.gif Это комплимент, я считаю. Для детского сада и пишу.
Цитата (Invis1ble @ 19.10.2015 - 23:54)
Позднее статическое связывание? Не, не слышал smile.gif

Нет, не слышал. Посмотрим, что за зверь.
Цитата (Invis1ble @ 19.10.2015 - 23:54)
Почему везде бросается \Exception ? Посмотри иерархию исключений в SPL. А еще лучше - создай собственное, подтип из SPL.
А зачем? Все равно все ексепшены ловятся дебаггером. Вообще там предпочтительнее trigger_error(), потому что логируются все ошибки, если логер включить. Пока еще не реализовано к сожалению.
Цитата (Santehnick @ 20.10.2015 - 00:05)
Попробуй теперь написать юнит-тесты на свой код, можно на этот класс

В чем сложность, не пойму я. На этот класс даже есть подобие теста. Ну да, ручной, а в чем затык автоматизировать? Может немного посложнее, чем если бы все хреначить как DI, но зато проще дебажить в процессе.

И вообще, класс DBG, это по сути контекст. Входной скрипт. Как и для чего на него юнит-тест писать? На контроллеры тоже нужны юнит-тесты? На них пишутся функциональные тесты. А Dbg, собственно как и AbcProcessor, и есть контроллеры. С чего то должен начинаться процесс. На остальные классы - легко. smile.gif

Цитата (Santehnick @ 20.10.2015 - 00:05)
Я думаю, что если бы сначала писались тесты, затем код, то дизайн был бы написан иначе.

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

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
chee
twin, вот это отступы!

https://github.com/abc-framework/abc-framew...gurator.php#L49

Цитата (twin @ 20.10.2015 - 02:43)
Там все полностью нужно смотреть. Сделал все по науке, по всем канонам ООП. Если кого смутит статический класс вместо bootstrap, то это просто оболочка для упрощения синтаксиса. Можно его вообще не юзать, писать на махровом ООП. А так вроде все фантики там есть. И куча паттернов, и все объектами и прочая лабуда.

Ты так пишешь как будто, что-то дельное и сложное написал. У тебя вообще кода там мало, что бы заявлять, что ты сделал все по науке.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 20.10.2015 - 05:40)
twin, вот это отступы!

https://github.com/abc-framework/abc-framew...gurator.php#L49

Не понял, какие отступы, что не так? Вроде исправил все.
Цитата (chee @ 20.10.2015 - 05:40)
Ты так пишешь как будто, что-то дельное и сложное написал. У тебя вообще кода там мало, что бы заявлять, что ты сделал все по науке
Я про науку о том, что есть. Нигде ничего не нарушил? Просто был огромный соблазн так не усложнять, но пришлось, раз уж взялся за гуж.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

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

user posted image
chee
Цитата (twin @ 20.10.2015 - 09:48)
Просто был огромный соблазн так не усложнять, но пришлось, раз уж взялся за гуж.

Еще раз повторюсь, у тебя там ничего нет, вплане количество кода и решаемые им задачи не позволяют сделать выводы, что у тебя все по науке.

Давай с примерами поясню.

Где тут твоё "по науке"
Голимая статика, работаешь на уровне глобального доступа, без всяких внедрений зависимостей. Это не по науке.

Про какие контейнеры, ты говоришь, ты даже не тестировал все это
Это вылетит с фатальной ошибкой . Это не по науке.

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

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

Я больше, чем уверен, что ты скатишься в глобокий говнокод на статике, если захочешь написать на этом фреймворке, ту типовую CMS'ку из соревнования по парадигмам. Ах, прошу прощения, ты вернешся к своему стилю написания программ если будешь реализовывать ту типовую CMS wink.gif

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Oyeme
Грамматическая обишка

https://github.com/abc-framework/abc-framew...r/Container.php

class Container extends ServiseLocator => ServiceLocator

Во всех местах $this->ServiseStorage


   /**
* Проверяет корректность ID сервиса
*
*
@param string $ServiseId
*
*
@return string
*/

protected function validateServise($ServiseId)
{
if (empty($ServiseId) || !is_string($ServiseId)) {
trigger_error('ID service should be a string', E_USER_WARNING);
}

return strtolower($ServiseId);
}


Зачем Вам вообще использовать trigger_error? Это самый высокий уровень иерархией ошибок,у Вас е это в ядре

The same


if ($this->userConfig['debug_mod'] === 'display') {
set_error_handler([$this, 'setException']);
new PhpHandler();
} elseif ($this->userConfig['debug_mod'] === 'log') {
new Loger();
}


Каким образом я смогу отловить определнного типа ошибку обработать? Скажем из самых низов.

  if ($this->userConfig['debug_mod'] === 'display') {

display - должно быть константой
 /**
* Перезаписывает глобальный компонент
*
*
@param string $component
*
@param array $data
*
*
@return object
*/


@return object - улыбнуло


https://github.com/abc-framework/abc-framew...bcProcessor.php

Грамматическая ошибка




/**
* @var object
*/
protected $regestry;


И тут


/**
* @var object
*/
protected $regestry;

/**
* @var object
*/
protected $container;

Вы autocomplete никогда не польовались?

Вот почитайте http://www.phpdoc.org/docs/latest/guides/types.html



 /**
* Выбирает режим обработки ошибок
*
*
@return void
*/

protected function selectErrorMode()
{
if (empty($this->userConfig['debug_mod'])) {
return false;
}

if ($this->userConfig['debug_mod'] === 'display') {
set_error_handler([$this, 'setException']);
new PhpHandler();
} elseif ($this->userConfig['debug_mod'] === 'log') {
new Loger();
}
}



Уже навреное тут упомяналось что return void, а возращяем только 1 раз и то при false.

Метод selectErrorMode говорит об выборе чего-то,а почему тогда возрощяет он что-то?

Если проверить установлен ли мод ошибок - isErrorModeSelected()

    /**
* Бросает исключение на trigger_eror и отчеты интерпретатора
*
*
@return void
*/

public function setException($code, $message, $file, $line)
{
if (error_reporting() & $code) {
throw new ErrorException($message, $code, $file, $line);
}
}



Что это такое вообще? Причем тут error_reporting() ? И для чего нам нужно устанавливавать Exception?

Если Вы хотите расширить Exceptions, то делается это очень просто,расширяя Ваш класс Exceptions в конструкторе Вы просто вызваете parent метод дополнительными аргументами.

Пример
http://php.net/manual/en/language.exceptions.extending.php

Потом еще гляну с точки зрения архитектуры.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.