- •Основи програмної інженерії Тема 1. Поняття програмної інженерії. Вступ
 - •Процес створення програмного забезпечення
 - •Моделі технологічного процесу створення пз
 - •Моделі процесу розробки по
 - •Характеристики якісного пз
 - •Тема 2. Види моделей систем. Поняття і класифікація вимог до програмної системи.
 - •Способи запису специфікацій вимог.
 - •Види моделей систем.
 - •Мова моделювання uml.
 - •Об'єктні моделі
 - •Інструментальні case-засоби.
 - •Тема 3. Поняття архітектурного проектування. Архітектурні моделі.
 - •Архітектурний шаблон mvc.
 - •Особливості шаблону mvc.
 - •Модель проблемної сфери.
 - •Тема 4. Важливі функціональні засоби мови c#. Автоматично реалізовані властивості.
 - •Ініціалізатори об'єктів та колекцій.
 - •Автоматичне виведення типу.
 - •Анонімні типи.
 - •Використання методів розширення Методи розширення
 - •Застосування методів розширення до інтерфейсу
 - •Створення фільтруючих методів розширення
 - •Тема 5. Лямбда-вирази. Мова linq. Лямбда-вирази.
 - •Мова linq.
 - •Методи розширення linq.
 - •Відкладені запити linq.
 - •Тема 6. Створення слабо зв'язаних компонентів. Впровадження залежності.
 - •Контейнери впровадження залежності.
 - •Бібліотека Ninject.
 - •Порядок роботи з Ninject.
 - •Тема 7. Засоби доступу до даних. Технологія ado.Net.
 - •Реалізація доступу до даних.
 - •Робота з даними.
 - •Тема 8. Тестування пз. Розробка через тестування. Автоматизоване тестування пз та його види.
 - •Розробка через тестування. Робочий потік "червоний-зелений-рефакторинг".
 - •Модель "організація.Дія.Твердження".
 - •Використання бібліотеки Moq
 - •Тема 9. Проектування інтерфейсу користувача. Інтерфейс користувача.
 - •Переваги графічного інтерфейсу.
 - •Процес проектування графічного інтерфейсу.
 - •Принципи проектування інтерфейсів користувача.
 - •Шаблони.
 - •Тема 10. Основи інженерії вимог. Розробка вимог.
 - •Формування і аналіз вимог.
 - •Опорні точки зору.
 - •Сценарії.
 - •Атестація вимог.
 - •Тема 11. Прототипування програмних систем. Поняття прототипування.
 - •Переваги прототипування.
 - •Види прототипування.
 - •Технології швидкого прототипування.
 - •Тема 12. Покомпонентна розробка. Компоненти і класи об'єктів.
 - •Компоненти як постачальники послуг.
 - •Рівні абстракції компонентів.
 - •Вимоги до компонентів.
 - •Тема 13. Шаблони проектування. Структурні шаблони.
 - •Поняття шаблону проектування.
 - •Основні елементи шаблону.
 - •Механізми повторного використання.
 - •Структурні шаблони проектування.
 
Контейнери впровадження залежності.
Отже, ми вирішили свою проблему залежності: ми збираємося впроваджувати залежності в конструктори класів під час виконання. Але нам належить вирішити ще одну проблему: як створити екземпляр конкретної реалізації інтерфейсів, не створюючи залежності в інших частинах програми?
Відповідь полягає в контейнері DI, який також називають контейнером IоС. Він являє собою компонент, який діє в якості посередника між залежностями, необхідними такому класу, як PasswordResetHelper, і конкретною реалізацією цих залежностей, наприклад MyEmailSender.
Ми реєструємо в контейнері DI набір інтерфейсів або абстрактних типів, які використовує наш додаток, і вказуємо, примірники яких конкретних класів повинні бути створені для дотримання залежностей. Таким чином, нам доведеться зареєструвати в контейнері інтерфейс IEmailSender і вказати, що примірник MyEmailSender повинен створюватися у всіх випадках, коли потрібно lEmailSender. Завжди, коли нам потрібно IEmailSender, наприклад, для створення екземпляра PasswordResetHelper, ми звертаємося до контейнера DI і отримуємо реалізацію класу, яка була зареєстрована в якості конкретної реалізації інтерфейсу за замовчуванням – у даному випадку MyEmailSender.
Контейнер DI не потрібно створювати самостійно. Доступний ряд прекрасних безкоштовно ліцензованих реалізацій і реалізацій з відкритим вихідним кодом. Ми будем використовувати реалізацію Ninject, подробиці про яку можна з'ясувати на сайті www.ninject.org . Короткий опис її використання буде приведено нижче.
Порада . В Microsoft створили власний контейнер DI під назвою Unity. Але застосування Ninject демонструє можливість змішування і узгодження засобів при використанні MVC. Більш детальну інформацію про Unity можна знайти на сайті unity.codeplex.com .
Роль контейнера DI може здаватися простою і тривіальною, але насправді це не так. Хороший контейнер DI, такий як Ninject, має ряд дуже зручних функціональних можливостей.
Створення ланцюжка залежностей . У випадку запиту компонента, який має власні залежності (наприклад, параметри конструктора), контейнер задовольнить і ці залежності. Таким чином, якщо конструктор класу MyEmailSender вимагає реалізацію інтерфейсу INetworkTransport, контейнер DI створить екземпляр реалізації за замовчуванням цього інтерфейсу, передасть її конструктору MyEmailSender і поверне результат в якості реалізації за замовчуванням IEmailSender.
Управління життєвим циклом об'єкта . Якщо компонент запитується більш одного разу, чи потрібно кожного разу отримувати один і той же або зовсім новий екземпляр? Хороший контейнер DI дозволяє конфігурувати життєвий цикл компонента, надаючи можливість вибору з набору заздалегідь визначених варіантів, у тому числі єдиний екземпляр ( один і той же примірник у всіх випадках), тимчасовий примірник ( новий екземпляр в кожному випадку), примірник на потік, примірник на HTTP-запит, примірник з пулу і безліч інших.
Конфігурування значень параметрів конструктора. Наприклад, якщо реалізація інтерфейсу INetworkTransport вимагає рядковий параметр serverName, у нас повинна бути можливість установки його значення в конфігурації контейнера DI. Це груба, але проста система конфігурування, яка позбавляє код від якої необхідності передавати рядки підключення, адреси серверів і т . п.
Можливо, у вас виникне бажання створити власний контейнер DI. При наявності вільного часу і бажання більше дізнатися про різних гранях C # і . NET рішення цього завдання може стати прекрасним експериментальним проектом. Якщо ви хочете використовувати контейнер DI в робочому додатку MVC, ми рекомендуємо зупинитися на одному з готових контейнерів, такому як Ninject.
