Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Самопис для форума [7]
Форумы портала PHP.SU » Разное » Колонка администратора » Самопис для форума

Страниц (14): В начало « ... 3 4 5 6 [7] 8 9 10 11 ... » В конец
 

91. teddy - 17 Декабря, 2014 - 23:04:32 - перейти к сообщению
DeepVarvar пишет:
Экземпляр не создается, все методы статические.

А зачем столько статики? В чем ты видишь плюс такого подхода?

DeepVarvar пишет:
это конечный автомат устанавливающий некоторые внутренние состояния.

И это плохо. Есть куча зависимостей. Я не смогу скопировать к себе в проект этот класс не изменив его код. Связи должны быть как можно слабыми. В идеале должна быть возможность скопипастить твой реквест в другой проект и чтоб совсем без правок.

DeepVarvar пишет:
Ну, ради трехстрочного метода создавать еще один класс, как-то не то. Пусть в реквесте пока лежит.

А чего сразу класс если нужно по простому - опиши в базовом контроллере метод редирект и все дела

DeepVarvar пишет:
Проверь-ка это в CLI режиме ))

А можно подумать на форум через CLI будут ходить Улыбка

DeepVarvar пишет:
Request это конечный автомат устанавливающий некоторые внутренние состояния.

Ключевое слово "внутренние". Опять же зависимости что не есть гуд.

DeepVarvar пишет:
Есть ли смысл работать дальше, если запрос клиента невалиден?

Думаю это должен решать роутер.
92. DeepVarvar - 17 Декабря, 2014 - 23:18:25 - перейти к сообщению
teddy пишет:
А зачем столько статики? В чем ты видишь плюс такого подхода?

1) Без создания экземпляра не выделяется дополнительная память.
2) Для получения ссылки на экземпляр где-то в другом месте нужен какой-нибудь getInstance(), а это? еще одна сущность которая скушает памяти еще?
3) Скажем "нет" рекурсивным ссылкам в разных сущностях. А GC ох как не любит такие рекурсивные ссылки. Сколько его не оптимизировали, всеравно не любит, и течет.
teddy пишет:
В идеале
Это к фреймворкам, которые по 20 метров на хеллоуворлд кушают. А тут, к сожалению (или счастью?), связь компонентов не слабая.
teddy пишет:
опиши в базовом контроллере метод редирект
Почему редиректить должен контроллер? По мне так он должен отработать свою логику, и если ему надо, позвать Request::redirect()
teddy пишет:
А можно подумать на форум через CLI будут ходить
Крон будет ходить. Не вгетом или курлом, а в CLI.
teddy пишет:
Ключевое слово "внутренние"
Да, многие компоненты работают так же - складывают в нутри себя какие-то кучки данных и отдают их через геттеры.
teddy пишет:
Думаю это должен решать роутер
Это должен решать роутер?
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://domain.tld///%///asd/[]{}/%%7ujj?//?s?ds?dfg??&&//&&dfg&&//&dfg&&gd&iii?????
93. Panoptik - 17 Декабря, 2014 - 23:41:20 - перейти к сообщению
надобно заметить если уж редирект не является частью контроллера, то по своей природе он ближе к респонзу, а не к реквесту, так как я помню там же имеется что-то типа респонза, то что готовит данные в разные форматы (хмл, джейсон, хттп), так вот редирект как раз одна из таких штук что идет с ответом, а не с запросом
94. teddy - 17 Декабря, 2014 - 23:46:09 - перейти к сообщению
DeepVarvar пишет:
Без создания экземпляра не выделяется дополнительная память.

Хм тогда проще писать в процедурном стиле )) Как по мне - то лучше в целом пусть отожрется на 2 метра больше за то в угоду удобства и гибкости

DeepVarvar пишет:
Почему редиректить должен контроллер? По мне так он должен отработать свою логику, и если ему надо, позвать Request::redirect()

Так реквест же это не редиректор какой нить. Реквест, запрос. Завтра тебе понадобится сделать редирект по имени роута его тоже в реквест оформишь или пойдешь переписывать все двигло где ты вызывал Request::redirect() ? Или нет, дай угадаю, редирект оставишь в реквесте а для роут-редиректа придумаешь что то ещё))

DeepVarvar пишет:
Это должен решать роутер?

А у тебя есть такой роут? Думаю нет... там же пользователь и получит заветный Not found

Порой экономия на спичках дорого обходится поверь
95. DeepVarvar - 17 Декабря, 2014 - 23:46:59 - перейти к сообщению
Panoptik пишет:
он ближе к респонзу
В точку! Записал в TODO с пометкой "подумать кому рассовать ф-ционал".
(Добавление)
teddy пишет:
Хм тогда проще писать в процедурном стиле ))
Ой не сравнивай, процедурка в пыхе это адъ. Если в сях хотябы глобальные переменные можно без костылей, то в пыхе будешь везде писать global внутри ф-ций ))
teddy пишет:
А у тебя есть такой роут?
У нас там автороут, без описания маршрутов. Положил контроллер в папочку - получи точку доступа. Именно поэтому нет смысла вообще этот автороут запускать если запрос невалид.

Помечу оффтопом. Многие в курсе моего отношения к "спичкам".

teddy пишет:
Порой экономия на спичках
... дает потрясающие результаты по работе с ресурсами сервера и скоростью ответа.
96. MiksIr - 18 Декабря, 2014 - 00:46:50 - перейти к сообщению
Мелкий пишет:
от материал, что знаю - обсуждалось именно на стороне приложения. И failover, и шардирование РСУБД обсуждалось в контексте приложения.

Шардирование конечно на стороне приложения. А файловер - неверняка решения есть, я к сожалению только в постгресе ориентируюсь по кластерным решениям. Ну просто никакого профита от переноса это в приложение не вижу.
97. DeepVarvar - 18 Декабря, 2014 - 01:05:28 - перейти к сообщению
Мелкий пишет:
Возможно. Ваш вариант?
Нарыл вот такое
Как оно? Будет съедобно?
(Добавление)
Еще один путь
(Добавление)
Засим, я пока пропущу момент с пинанием конекшнов, на сейчас закостылю сингловый.
А когда устаканим что и как именно будет использоваться - при необходимости поправлю.
Сейчас же двинусь дальше, тут вон, две страницы критики, есть чем заняться.
98. Bio man - 18 Декабря, 2014 - 11:45:25 - перейти к сообщению
DeepVarvar пишет:
2) Для получения ссылки на экземпляр где-то в другом месте нужен какой-нибудь getInstance(), а это? еще одна сущность которая скушает памяти еще?
Почему бы не внедрить Service Locator?

Поддерживаю тех, кто говорит про спички. В итоге спички могут встать боком и стоить гораздо дороже. Всё же это PHP. Если ты так гонишься за оптимизацией, давай тогда делать на CGI или Java
(Добавление)
Как по мне, так редиректить должен роутер или респонс. Но точно не реквест.
Реквест не должен выполнять каких то действий, он пассивен - получил данные, отдал данные.

Редирект по сути всего лишь заголовок, так что в респонсе ему есть место быть.
Если понадобится редирект на роут, то у роутера запрашиваем URL по роуту и передаём его в метод редиректа респонса.
99. esterio - 18 Декабря, 2014 - 14:45:19 - перейти к сообщению
DeepVarvar пишет:
Нарыл вот такое
Как оно? Будет съедобно?

а сколько то физических серверов есть чтобы думать о кластере. возможно их два или вообще один. тогда какой может быть кластер.

1. автолоадер лучше подключать извне а не в индексе
2. все о том же автолоадере. я предпочитаю абсолютные пути и поетому добавил бы ROOT директорию пред подключением. но это ИМХО
3. App::run($useMemory, $startTime, $isCLI); - логичней если дебаг, то внутри метода запоминать и визивать функции memory_get_usage, microtime. это ж глобальные переменные . причем функции всегда визиваються. а по сути перед этим практически никакой логики кроме инициализации констант и автолоадера нету.
4. в App::run куча статикы инициализаций нагло вшитий. ИМХО лучше сервис локатор или фабрику дергать
5. ДБ - я уже говорил что тут лугче использовать Lazy Load. зачем дергать базу, если она может и не нужна будет.
6. реквест я все же бі сделал не статичным. там можно было даже использовать два наследника один для веба ($_GET, $_POST, $_SERVER) другой для CLI (argc, argv)
7. на счет View. мне больше нравиться return в action-е. например return $this->rendrer('view_path', array($params));

это я так бегло глянул в код. все написаное ИМХО
100. Bio man - 18 Декабря, 2014 - 15:25:28 - перейти к сообщению
Еще 1 важнейшиейший вопрос. Почему то никто даже не упомянул его. Может я что то пропустил?
Как планируется управлять зависимостями? Только не говорите что через pear
(Добавление)
И как обстоят дела с ресурсами типо цсс картинок итд? Будут они храниться в куче или предусмотрен (планируется) компонент управления ресурсами и их зависимостями?
101. DeepVarvar - 18 Декабря, 2014 - 16:28:44 - перейти к сообщению
esterio пишет:
а сколько то физических серверов есть
Это же закладка на будущее.
esterio пишет:
1. автолоадер лучше подключать извне а не в индексе
Я оформил в индексе, т.к. сразу же вызываю App уже без "позорных" инклюд.
esterio пишет:
2. все о том же автолоадере. я предпочитаю абсолютные пути и поетому добавил бы ROOT
А оно там есть - константа APPLICATION. Единственное - все ядерные компоненты лежат в глобальном неймспейсе.
esterio пишет:
внутри метода запоминать и визивать функции memory_get_usage, microtime ... перед этим практически никакой логики кроме инициализации констант и автолоадера нету
Так эту логику счетчик тоже считает, потому и объявлено в самом-самом начале.
esterio пишет:
4. в App::run куча статикы инициализаций нагло вшитий. ИМХО лучше сервис локатор или фабрику дергать
init() === статический __construct(). Подробности в самом низу.
esterio пишет:
5. ДБ - я уже говорил что тут лугче использовать Lazy Load. зачем дергать базу, если она может и не нужна будет.
Суть уловил, разберемся с местер-слейв, заодно и с ленью базы. Я кстати Мелкому задавал вопрос делать ли ленивые коннекты. Он пока не ответил.
esterio пишет:
6. реквест я все же бі сделал не статичным. там можно было даже использовать два наследника
"Ну вот опять" - подумал горшок с петуньей.
esterio пишет:
7. на счет View. мне больше нравиться return в action-е. например return $this->rendrer('view_path', array($params));
А мне нравится возможность набросать данных и затем одной командой переопределить (указать) формат фозвращаемых данных - html, xml, json, txt.
Bio man пишет:
Как планируется управлять зависимостями?
Какими?
Bio man пишет:
как обстоят дела с ресурсами типо цсс картинок итд?
Сейчас просто лежат в отдельном месте, разложены аккуратными кучками.
Если придет Дельфин - то точно будет LESS/SASS. Он это дело любит.

Про статику:

Объясните в чем профит создавать экземпляры когда заранее известно, что это синглтоны? И в чем профит для
AnotherWrapper::getSomeClassInstance('Blah')->method();
или
$AnotherWrapper->Blah->method();
или
$AnotherWrapper->getBlah()->method();
или
function ($Blah) { $this->Blah = $Blah;
относительно к

\Blah::method();

Вам же самим придется думать как передать желаемую сущность куда-то, через аргумент или дергать еще одну вспомогательну сущность, чтобы получить ссылку на нужную.
Вот оно - классы ради классов, ООП ради ООП.
Посмотрите как начинаются статьи в интернете - почти все, со слов "Проблемы создания, хранения и получения экземпляра." и даются паттерны для решения.
Ага, написать и оттестировать еще 1-3 вспомогательных класса просто для того, чтобы обеспечить доступность сущностей в других местах.
И это только потому, что эти сущности изначально где-то объявлены через new Entity();
К чему создавать лишние экземпляры? Ты сам же будешь потом еще думать кого позвать для той или иной цели.
Это я вам как горшок с петуньей говорю, кашалоты вы мои ))
(Добавление)
Bio man пишет:
Почему бы не внедрить Service Locator?
Шило на мыло?
Bio man пишет:
Как по мне, так редиректить должен роутер или респонс. Но точно не реквест.
Да, я уже ответил паноптику, что вынесу редирект и хедеры в респонз.
102. Мелкий - 18 Декабря, 2014 - 16:52:50 - перейти к сообщению
DeepVarvar пишет:
Я кстати Мелкому задавал вопрос делать ли ленивые коннекты.

Пропустил, значит. Да, конечно, делать.
103. esterio - 18 Декабря, 2014 - 17:11:39 - перейти к сообщению
DeepVarvar не злись Радость я сказал что это мое мнение. лично я считаю все же создание обьекта лучеш статики, потому что потом можно легко его подменить, а такие случаи я встречал за свою практику. Вот и моенно поетому взял для себя за правило минимум статики. если мне нужен синглтон, то например сервис-локатор умеет делать синглтон (да знаю там все равно будет инстанс внутри). Но здесь идеть речь не ООП ради ООП, а ООП ради удобства не более. С таким подходом зачем тогда на будущее делать класеризацию, если нельзя на будущее нельзя делать подмену обьектов. вот к чему я веду.

П.С. да знаю все набросились на тебя одного ибо каждый видит этот сранный ООП по своему и каждий пишет по своему как ни крути (особенно в ПХП). но ты же хотел критики, вот тебе и критика )))
104. DeepVarvar - 18 Декабря, 2014 - 17:24:22 - перейти к сообщению
esterio пишет:
не злись
Да не злюсь я, просто юмор такой с кашалотом.
esterio пишет:
если мне нужен синглтон, то например сервис-локатор умеет делать синглтон
А если надо будет подменить локатор? ))
esterio пишет:
ради удобства не более
Шашечки или ехать?
В частности - напомню, что моя защита статики касается только глобально используемых сингтонов-инстансов, остальные то у нас лениво лежат в App ну и коннекты в отдельном месте.
(Добавление)
Мелкий пишет:
Пропустил, значит. Да, конечно, делать.
А что насчет вариантов на стороне мускуля?

И еще - ты писал что не любишь актив-рекорд модели, я скажу что я их вообще не люблю.
Но это не дело будет - обделить остальных хоть какими-то моделями.
Так вот, какими ты видишь модели?
105. esterio - 18 Декабря, 2014 - 18:26:51 - перейти к сообщению
я пропоную сделать небольшой хедпер аля DBL для быстрого INSERT, UPDATE, DELETE
например
PHP:
скопировать код в буфер обмена
  1. $last_insert_id = DB::insert('tableName', array(
  2.     'fiedl1' => 'value1',
  3.     'fiedl2' => 'value2',
  4.     // ...
  5. ));

для большинства задачит вполне хватит. а если там уже супер-пупер слоєная кверя, то можно просто юзать DB::query.

 

Powered by ExBB FM 1.0 RC1