1. Предпосылки появления DI-контейнеров Уральская группа пользователей .NET, март 2010 Павел Егоров, СКБ Контур pe@skbkontur.ru http://xoposhiy.livejournal.com
2. S RP — Single Responsibility Principle O CP — Open Closed Principle L SP — Liskov Substitution Principle I SP — Interface Segregation Principle D IP — Dependency Inversion Principle
4. S RP — Single Responsibility Principle O Модуль = = одна обязанность = = одна причина изменения L I D пихать все в один класс — НЕТ! :-br />плодить много мелких классов— ДА :-)
7. Классы должны зависеть от интерфейсов, а не от других классов. IDecoder Invoice Converter S O L Iso8859Decoder Utf8Decoder … I DIP — Dependency Inversion Principle
8. publicInvoiceConverter( IDecoder decoder) { this.decoder = decoder; } … publicvoid Convert() { … decoder.Decode(…); … } IDecoder Invoice Converter Utf8Decoder Iso8859Decoder new InvoiceConverter( new Iso8859Decoder()); или new InvoiceConverter( new Utf8Decoder()); SRP + DIP всех вылечат! :-)
17. более100сервисов Rule of thumb: 1 сервис на каждые 5-7 килобайт кода Электронный бухгалтер Действительно МНОГО серого тупого рутинного кода
18. время жизни Автоматический поиск всех типов с каждой новой «фичей» будет все хуже… Ленивая инициализация, коллекции, один объект на несколько интерфейсов, xml-конфигурирование, IDisposable, дочерние контейнеры, …
22. Подытожим Наш проект ждут изменения. SRP+DIP дают нам защиту от изменений, но… …принуждают к тому, чтобы писать много мелких классов. Из мелких классов где-то нужно собирать граф объектов. Контейнеры всего лишь упрощают эту сборку. А с convention over configuration упрощают радикально! Вопросы
23. Но будет много противных аргументов конструктора! обычно бывает так: а вовсе не так: — Аргументов будет мало, это я вам гарантирую! ;-) секретный слайд
26. Robert C. Martin objectmentor.com Design Principles and Design Patterns http://objectmentor.com/resources/articles/Principles_and_Patterns.pdf
27. rigidity viscosity нетехнологичность жесткость …проще сделать «в обход» …надо много переделывать Дизайн плох, если… [когда приходит новая задача] …использовать готовое решение не получается …трогать код опасно! хрупкость немобильность fragility immobility