Содержание
- 2. О пользе проектирования Изначально любая система обладает некоторой гибкостью (agility), другими словами, способностью к изменению. В
- 3. S O L I D
- 4. Принцип единственной обязанности Каждый интерфейс должен отвечать за что-то одно. Индикатор ответственности – повод для изменений.
- 5. Принцип открытости-закрытости Модуль или класс должен быть закрыт для изменений и открыт для дополнений. Иными словами,
- 6. class Picture { List figures; public void Print() { foreach (var f in figures) { if
- 7. abstract class Figure { public int X { set; get; } public int Y { set;
- 8. Принцип подстановки Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа даже не
- 9. Контракт = Интерфейс Программирование по контракту + Предусловия + Постусловия + Инварианты Предусловия – это ограничения,
- 10. Контракты в .NET http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx Библиотека и статический класс Contract. Преобразователь кода – ccrewrite.exe. Анализатор кода –
- 11. Code Contracts в Студии
- 12. // Прямоугольник с фиксированным периметром и шириной больше высоты. class MyRect { double p, w, h;
- 13. Принцип разделения интерфейсов Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на
- 14. Принцип инверсии зависимостей Зависимости внутри системы строятся на основе абстракций (т.е. интерфейсов). Модули верхнего уровня не
- 15. Пример зависимости // Воин владеет оружием public class Warrior { readonly Sword weapon; // Оружие получает
- 16. Инверсия зависимости IWeapon Warrior Sword x // Оружие способно убивать public interface IWeapon { void Kill();
- 17. Код после инверсии зависимости public class Warrior { readonly IWeapon weapon; public Warrior(IWeapon weapon) { this.weapon
- 18. IoC-контейнер IoC контейнер - это служба для управления созданием объектов. Составные части контейнера: Регистратор реализаций Фабрика
- 19. Пакет Ninject и его установка Меню: TOOLS / Library Package Manager / Package Manager Console или
- 20. Ninject в настольном приложении using Ninject.Modules; public class WeaponNinjectModule : NinjectModule { public override void Load()
- 21. Атрибут [Inject] public class Warrior { [Inject] public IWeapon Weapon { set; get; } public void
- 23. Скачать презентацию