Здравствуйте, #John, Вы писали:
J>Подумал, если DI, IoC, Singleton сравнивать с реальной жизнью.
Лучше не надо. Надо взять какой-то код и попробовать переписать в разных стилях. Можешь показать тут какой-нибудь код, а я могу попробовать дать идеи как его переписать на DI.
Но если тебе так хочется, вот моя аналогия.
J>Представим что у нас есть 1000 новостей, которую мы хотим рассказать городу. J>* Singleton — вешаем доску с новостями и каждый житель города, сам решает когда ему подойти и прочитать что он хочет.
Это скорее всего большой открытый базар-толкучка. Ибо доска read only, а синглтоны — ВНЕЗАПНО меняются. Особенно такие как HttpContext.CurrentRequest.
J>* DI — мы попомним, чем интересуется каждый из жителей и когда у нас появляются новости, мы бежим в нужную квартиру доложить о новостях.
Это что-то типа заказа по интернету. Задекларировал "нужны штаны и ведро картошки", тебе их привозят домой с помощью специально организованной службы доставки (wiring code), тебя как клиента не интересует как служба работает. Служба доставки знает что кому нужно и организует логистику чтобы всем всё доставлять.
J>* IoC
Ты наверное имеешь в виду Service Locator.
SL и DI — это паттерны, которые реализуют принцип IoC — когда не ты сам идёшь за тем, что тебе надо, а тебе дают то что тебе надо.
J>SL — у каждого жителя включен телефон и мы вещаем в тел. новости пачками иногда доставляя их не тем кто их ждет.
Что-то вроде специализированных магазинов. Ты знаешь где продаются штаны и туда ходишь.
J>Проблема IoC в том что нам сложно/дорого провести нормальную связь к каждому из жителей.
Проблема — идёшь в магазин, а он закрыт, или товар заканчивается и ты остаёшься без штанов, или там жуткая очередь.
J>Проблема DI в том что нам надо помнить кому что надо знать и постоянно бегать к жителям домой. (а они гады иногда спят, едят, гуляют где-то в вне квартиры).
Проблема — нужна компьютерная грамотность у населения. Зачем жамкать какие-то кнопки у шайтан-машины, когда можно как мой дед выйти вон на ту площать и купить/продать ведро картошки.
J>Проблема Singleton в том что возле доски может собраться большая толпа людей и они могут приходить в неправильной последовательности как нам хотелось бы.
Проблема — пришел за штанами в знакомое место, а там офигенная очередь, или продавец ими больше не торгует, или на обед решил сходить. Ещё надо хорошо помнить и знать куда за чем ходить.
J>Но, если взглянуть на жизнь со стороны, то решать проблемы с Singleton проще/дешевле/лучше, чем другими методами: J>городские телефоны у нас глючат(бывает такое что слышем в трубке соседей)/IoC/, доставляя неудобства; почтальоны, те кто снимают показания с щетчиков, раздают повестки приходят когда нас нет дома/DI/, теряют на это драгоценно время всего общества. Но, когда мы приходим в налоговую или к врачу, всегда можно взять талончик и узнать приблизительно время, когда можно подойти или записаться на определенно время(хз, может еще не везде так, но упустим политику)/Singleton/, тут у нас страдает(или вообще нет), только отдельно взятый юнит.
signleton подходит для небольших городов. В городах побольше уже образуются несколько базаров, пришел в один — ничего нет, поехал в другой. А где-то очереди, а где-то пусто, а где-то густо. И сложно угадать что когда и какого качества сможешь купить.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай