
- •Основи програмної інженерії Тема 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.