Специальность "Информатика и вычислительная техника". Не думаю, что тут есть смысл сравнивать со специалитетами, где на 3ем курсе пишут с нуля реализацию трассировки лучей с тенями.
Здорово, что у Вас не встали в позу и дали реализоваться. В тыщу раз лучше, чем переписанная вода без намека на понимание содержания в 146% случаев.
Высшее образование (на самом деле - специальное) - штука полезная, но только при условии сознательного выбора и обучения. В противном случае - это просто трата N лет жизни на протирание штанов. Почему-то в головы со школы вбивают, что образование нужно не самим учащимся, а кому-то другому. "Будешь учиться на двойки - пойдешь дворником работать". Что возможность получать знания - не привилегия, а тяжкая ноша и обязанность. Оценки эти школьные на хлеб не намажешь, на молоко не обменяешь. А вот полученные знания - определяют твою жизнь на десятилетия вперед.
DI - это внедрение зависимости. И пример: два класса, один без DI, второй с инъекцией в конструктор (DuckDi). Это реализация принципа IoC, когда зависимости мы отдаем на "внешний код", например, IoC контейнеру, которым является ServiceCollection. Он сам уже по тем или иным принципам выбирает, какой IFeed выдать утке.
class Duck{
IFeed Feed
Duck()
{
Feed = new MyFeed();
}
}
}
class DuckDi{
IFeed Feed;
Duck(IFeed feed)
{
Feed = feed;
}
}
А вот пример применения паттерна ServiceLocator. Разница с Ioc Contaner в том, где определяются зависимости. Если в самом классе локатора - то, это локатор. Если где-то снаружи - то это контейнер. Как раз в namespace DuckFeed - контейнер снаружи.
class Duck{
IFeed Feed;
Duck(){
var locator = new ServiceLocator();
Feed = locator.GetService<IFeed>()
}
}
class ServiceLocator{
T GetService<T>(){
return new ServFeed();
}
}
Думаю теперь, когда я привел примеры, тема сабжа стала понятнее. Это как раз то, что я и пропустил в статье в начале, т.к. об этом написано куча статей и даже книг, тот самый Мартин - как раз одну такую написал, рекомендую к прочтению.
Фре́ймворк — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Без .NET Framework скомпилированный код C# даже не запуститься, поэтому он и Framework. Т.к. компилируется он в байт код для машины CLR, а не в прямые команды процессора.
Ответ на коммент ниже:
2. При вызове конструктора можно вместо ссылки на сервис указать ключевое слово, которое вызывает запрос в DI, типа так: var obj=new Xyzzy(inject,inject).
Тут я вообще не понимаю, в чем смысл?
А система программирования находит и подставляет реализации сервисов из контейнера DI.
Она и так это делает, только без всяких атрибутов.
Ну нет так нет) Боб Мартин врал нам всё это время! ? А ведь мы ему верили... как же я был глуп и наивен! ?
У вас фреймворка нет
Ну ок, нет так нет. Прям как в анекдоте "Товарищъ сеньор, я свой фреймворк не чувствую"? Правда не ясно, как код компилится и запускается, без фреймворка, ну да ладно, "как-то магически" тоже вариант))
Scoped, создается обращением к IServiceScope.ServiceProvider где-то внутри фреймворка.
Ну ок, но зачем пересказывать статью в комментарии-критике к этой же статье) И не "где-то", а вполне конкретные места есть и я их даже видел)
DI - это я так сократил di ioc. В карму плюсы всем комментаторам, т.к. чот тут совсем тухло стало, я как бы 8 лет сюда не заходил) Но в коммент - минус, т.к. складывается ощущение, будто пишущие вообще не понимают, о чем пишут.
Почему извращенный, почему локатор? Смотрим в namespaceDuckFeeding
Там нет ссылок на сервис локатор. Вообще никаких. Т.е. эта область кода не завязывается никак на сервисы. В этом и профит.
А точка сборки не отличается для локатора и DI, она в самом начале листинга. Это и инкапсулировано за реализацией, в .NET, я просто показал, как оно внутри работает.
То, что она будет реализовывать интерфейсы IFeed и IDuck - мы задаем через фабричный метод s => s.GetRequiredService() в противном случае, .NET будет создавать новый экземпляр на каждый тип интерфейса.
По Вашему - везде где, например, инъекция в конструктор .ctor(IFeed feed) будет создаваться новый объект new Duck() в IFeed. Таков .NET.
Сатью не читай, коммент пиши? habrahabr.ru/post/189610
Копипаста картинок формул с википедий. Если в конце концов не погрузятся — перезалью через интерфейс.
Для кого — в рамках дисциплины «экономико-математических методов», для вас — «квалиметрия и системный анализ», для нас — «проектирование экспертных систем». Довольно обширная область.
5ое правило старо как мир. Все новое — это хорошо забытое старое.
А вот со вторым не согласен. Лучшие идеи это те, о которых говорят: «Как же я сам до этого не додумался!» Все гениальное — просто. Чем проще и оригинальней идея — тем она лучше.
Солидарен. Разумеется, написанный на порте XNA конструктор никак не может тягаться с движками типа Unity, тем более выступать в качестве среды разработки, как вообще такое могло прийти в голову. Да и цена не совсем адекватная, оттого в начале поста о ней и упомянул.
Но акцент на кооперативе приглянулся. Тот же Scratch (почему скретч-то?) предполагает индивидуальную разработку. В современных реалиях не мало важно умение работать в коллективе. Когда-то писал на Blitz3D и все было ОК, но сейчас в одиночку разработать хороший продукт сложно (читай: сомнительная затея).
Честно говоря, особо не интересуюсь «игрушками» про программирование и конструкторами игр, но если их действительно так много, то не против был бы взглянуть на пару хороших примеров. Хотел плюсануть и понял, что за пост карму минусанули на единичку =D
Решил проверить.
Причем банальный гаусс на фоне отличается от мягкого свечения, не могли бы вы вкратце описать и принцип «мягкого?» Или это тот же самое, лишь с допущениями?
Специальность "Информатика и вычислительная техника". Не думаю, что тут есть смысл сравнивать со специалитетами, где на 3ем курсе пишут с нуля реализацию трассировки лучей с тенями.
Ничего не понял, но плюс на всякий случай поставил.
Здорово, что у Вас не встали в позу и дали реализоваться. В тыщу раз лучше, чем переписанная вода без намека на понимание содержания в 146% случаев.
Высшее образование (на самом деле - специальное) - штука полезная, но только при условии сознательного выбора и обучения. В противном случае - это просто трата N лет жизни на протирание штанов. Почему-то в головы со школы вбивают, что образование нужно не самим учащимся, а кому-то другому. "Будешь учиться на двойки - пойдешь дворником работать". Что возможность получать знания - не привилегия, а тяжкая ноша и обязанность. Оценки эти школьные на хлеб не намажешь, на молоко не обменяешь. А вот полученные знания - определяют твою жизнь на десятилетия вперед.
Для начала объясню по понятиям:
DI - это внедрение зависимости. И пример: два класса, один без DI, второй с инъекцией в конструктор (DuckDi). Это реализация принципа IoC, когда зависимости мы отдаем на "внешний код", например, IoC контейнеру, которым является ServiceCollection. Он сам уже по тем или иным принципам выбирает, какой IFeed выдать утке.
А вот пример применения паттерна ServiceLocator. Разница с Ioc Contaner в том, где определяются зависимости. Если в самом классе локатора - то, это локатор. Если где-то снаружи - то это контейнер. Как раз в namespace DuckFeed - контейнер снаружи.
Думаю теперь, когда я привел примеры, тема сабжа стала понятнее. Это как раз то, что я и пропустил в статье в начале, т.к. об этом написано куча статей и даже книг, тот самый Мартин - как раз одну такую написал, рекомендую к прочтению.
Фре́ймворк — программная платформа, определяющая структуру программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта.
Без .NET Framework скомпилированный код C# даже не запуститься, поэтому он и Framework. Т.к. компилируется он в байт код для машины CLR, а не в прямые команды процессора.
Ответ на коммент ниже:
2. При вызове конструктора можно вместо ссылки на сервис указать ключевое слово, которое вызывает запрос в DI, типа так:
var obj=new Xyzzy(inject,inject).
Тут я вообще не понимаю, в чем смысл?
А система программирования находит и подставляет реализации сервисов из контейнера DI.
Она и так это делает, только без всяких атрибутов.
Вообще, в самом языке C# никакого DI нет.
Ну нет так нет) Боб Мартин врал нам всё это время! ? А ведь мы ему верили... как же я был глуп и наивен! ?
У вас фреймворка нет
Ну ок, нет так нет. Прям как в анекдоте "Товарищъ сеньор, я свой фреймворк не чувствую"? Правда не ясно, как код компилится и запускается, без фреймворка, ну да ладно, "как-то магически" тоже вариант))
Ну ок, но зачем пересказывать статью в комментарии-критике к этой же статье) И не "где-то", а вполне конкретные места есть и я их даже видел)
DI - это я так сократил di ioc. В карму плюсы всем комментаторам, т.к. чот тут совсем тухло стало, я как бы 8 лет сюда не заходил) Но в коммент - минус, т.к. складывается ощущение, будто пишущие вообще не понимают, о чем пишут.
Можно было бы еще выделить один уровень абстракции и разделить, но просто больше кода будет.
Минус я поставил, если что) Сейчас объясню.
Почему извращенный, почему локатор? Смотрим в namespace DuckFeeding
Там нет ссылок на сервис локатор. Вообще никаких. Т.е. эта область кода не завязывается никак на сервисы. В этом и профит.
А точка сборки не отличается для локатора и DI, она в самом начале листинга. Это и инкапсулировано за реализацией, в .NET, я просто показал, как оно внутри работает.
Советую почитать http://sergeyteplyakov.blogspot.com/2013/03/di-service-locator.html
Дефолтный - пустой? Не слышал, врят-ли.
Упрощение.
По Вашему - везде где, например, инъекция в конструктор .ctor(IFeed feed) будет создаваться новый объект new Duck() в IFeed. Таков .NET.
ФЗ 169-32 «О запрете модели free to play с непрозрачной системой монетизации для социальных сетей» (с) Ми$%$#на /sczm>
Копипаста картинок формул с википедий. Если в конце концов не погрузятся — перезалью через интерфейс.
А вот со вторым не согласен. Лучшие идеи это те, о которых говорят: «Как же я сам до этого не додумался!» Все гениальное — просто. Чем проще и оригинальней идея — тем она лучше.
Но акцент на кооперативе приглянулся. Тот же Scratch (почему скретч-то?) предполагает индивидуальную разработку. В современных реалиях не мало важно умение работать в коллективе. Когда-то писал на Blitz3D и все было ОК, но сейчас в одиночку разработать хороший продукт сложно (читай: сомнительная затея).
Честно говоря, особо не интересуюсь «игрушками» про программирование и конструкторами игр, но если их действительно так много, то не против был бы взглянуть на пару хороших примеров.
Хотел плюсануть и понял, что за пост карму минусанули на единичку =D
Причем банальный гаусс на фоне отличается от мягкого свечения, не могли бы вы вкратце описать и принцип «мягкого?» Или это тот же самое, лишь с допущениями?