static VS Singelton

weregod

unserializer
Автор оригинала: grigori
weregod
Да, я понимаю и уточняю, что конкретно в моих задачах такого не бывает.
и слава Богу.
если у системы есть чёткий список требований в которых заявлен cron и та же отсылка почты происходит только через cron, а не через .опу, это хорошо ;)

Автор оригинала: grigori
у меня вот какая аллегория родилась :)
да, аллегория говорит нам о том, что при решении любых задач фанатизм лучше откладывать в сторону
 

whirlwind

TDD infected, paranoid
grigori дело в том, что когда в консоли запускаешь phpunit, этот вопрос отпадает автоматически. По крайней мере для меня точно.
 

Lightning

Трудоголик
у меня вот какая аллегория родилась
вы хотите мухи и котлеты положить в один пакет, но котлеты должны остаться съедобными!
вы кладете каждую котлету и каждую муху в специальные маленькие баночки, которые вместе формируют сложную красивую 3-d мозаику

а можно просто взять 2 пакета, и для каждого типа вызова писать отдельный маленький скрипт
Хорошая аллегория :)
Действительно, можно каждую муху и каждую котлету положить в отдельный пакетик. Потом, если потребуется заменить какую-либо муху на другую, можно просто вынуть нужный пакетик и положить вместо него другой.
А можно просто взять два пакета и накидать в каждый мух с котлетами, а потом копаться в этой биомассе грязными по локоть руками в поисках нужной мухи.
 

zerkms

TDD infected
Команда форума
Lightning
аллегория плохая.
человек пишет разные скрипты под cli и веб, а я не заморачиваюсь. я пишу их одинаково - и тестирую cli'шные скрипты в браузере, потому что так реально удобнее :)
 

zerkms

TDD infected
Команда форума
Lightning
я начинаю подозревать, что я тебя понял неверно, но перечитывание твоих слов ситуации не меняет.
или я разучился читать по-русски, или ты написал слишком неоднозначно. %)
 

Lightning

Трудоголик
Есть хорошая поговорка: "порядок время бережет".
"Положить муху в пакетик", т.е. написать обертку - минутное дело, зато сколько времени она может сэкономить в дальнейшем... Может, конечно, и не сэкономить, но пару минут - это не серьезные затраты, чтобы раздумывать, есть ли смысл писать обертку, нету ли смысла...
 

fixxxer

К.О.
Партнер клуба
какбе есть разница между написанием скриптов и крупных приложений. каждый подход оправдан в своем контексте.
 

AmdY

Пью пиво
Команда форума
вспомнился анекдот о том, через какое место лечил бы зубы гинеколог. получается cli пускать так же как и http запрос - здорово, но можно и замутить свою точку входа, без всяких mvc.

fixxxer +1. тоже касается и разработки визитки, erp или хайлода. написать фреймворк, который подходил под все эти цели можно, но это не добавит одновременного удобства для каждой цели.
 

Lightning

Трудоголик
AmdY
Так и пишется своя точка входа. Раннер для web и раннер для cli. А остальной код остается общим естественно. В Java это нормальная практика, но похапэшнеги настолько суровы...
 

Fortop

Новичок
но похапэшнеги настолько суровы..
Ох, не в php-шниках дело.

На другом форуме, сидит сейчас C-шник и жалуется, что cli и web приложение должно запускаться по-разному.
И вместо написание раннера на 2 строки, для запуска скрипта по крону, пользуется wget урл
 

AmdY

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

Fortop

Новичок
о каждый запрос идёт своим путём, используя свои класы.
Да почему разные?
Почему отправка mail по-крону должна делаться левым классом, а не через общий класс отправки mail?
 

AmdY

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

Lightning

Трудоголик
ну разная точка входа, то каждый запрос идёт своим путём, используя свои класы
Какие? В данном случае нам нужно заменить только один класс, класс получения входных данных. Остальной код такой же.
Отличие - одна строчка кода.

-~{}~ 04.04.10 19:59:

PHP:
require dirname(__FILE__).'/../framework.php';
Context :: setInstance( new CliContext() );
require dirname(__FILE__).'/../application.php';
PHP:
require dirname(__FILE__).'/../framework.php';
Context :: setInstance( new WebContext() );
require dirname(__FILE__).'/../application.php';
 

AmdY

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

-~{}~ 04.04.10 20:37:

если уж делать, то ни одной строчки не нужно менять, а сделать фабрику, которая сама определит контекст
 

Fortop

Новичок
AmdY
возможно медицина когда-нибудь тоже дойдёт до того, что сменив зеркало гинеколог сможет ставить пломбы, но я всё же пойду лечить зубы к стоматологу.
Разница контекста в том, что пришел ты к гинекологу или он пришел к тебе на дом.
Или вы вместе встретились на площади перед фонтаном.

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

Lightning

Трудоголик
AmdY
Ты проводишь неверные аналогии.

Вот у меня есть дрель. И разные сверла. Вставляю сверло по дереву - сверлю дерево, вставляю сверло по металлу - сверлю металл, вставляю победитовое - сверлю бетон. Зачем мне покупать три дрели для дерева, металла и бетона, если достаточно только разных сверел?

если уж делать, то ни одной строчки не нужно менять, а сделать фабрику, которая сама определит контекст
Можно и так. Разница копеечная.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
разница в том, что фабрику можно дописать в одном месте при создании осмысленных объектов, а прослойку надо использовать везде и всегда, вне зависимости от задачи


ладно, для меня итог таков:
есть две ситуации, в которых использование класса-прослойки для доступа ко внешним параметрам с неопределенной структурой данных часто дает удобства:
* юнит-тестирование в контексте отличном от исполнения - программирование ради тестирвания, религия
* создание жесткого API, в котором сложно что-то сломать - защита от самого себя

в обоих случаях очевидно, что надо использовать объекты, реализующие интерфейс, а никак не статику, и не синглтоны
 
Сверху