Как правильно писать тесты 46 Цикл разработки 46 Структура проекта с тестами 51 Утверждения (Asserts) 52 Утверждения в форме ограничений 54 Категории 56
Вид материала | Тесты |
СодержаниеКак выбирать паттерн проектирования Как пользоваться паттерном проектирования |
- Некорректные задания, 1276.79kb.
- К техническому регламенту, 835.7kb.
- Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке разработки, 494.44kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 652.85kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 623.18kb.
- Правительства Российской Федерации от 11. 11. 2005 N 679 о порядке разработки и утверждения, 533.6kb.
- Постановления Правительства Российской Федерации от 11. 11. 2005 n 679 о порядке разработки, 613.63kb.
- Об утверждении требований к схемам теплоснабжения, порядку их разработки и утверждения, 450.79kb.
- Рабочая программа учебной дисциплины. Общие требования, порядок разработки, согласования, 414.77kb.
- Постановлением Правительства Российской Федерации от 11 ноября 2005 г. N 679 о порядке, 1924.26kb.
Как выбирать паттерн проектирования
Если в распоряжение проектировщика предоставлен каталог из более чем 20
паттернов, трудно решать, какой паттерн лучше всего подходит для решения
конкретной задачи проектирования. Ниже представлены разные подходы к выбору
подходящего паттерна:
- подумайте, как паттерны решают проблемы проектирования. В разделе 1.6
обсуждается то, как с помощью паттернов можно найти подходящие
объекты, определить нужную степень их детализации, специфицировать их
интерфейсы. Здесь же говорится и о некоторых иных подходах к решению
задач с помощью паттернов;
- пролистайте разделы каталога, описывающие назначение паттернов. В
разделе 1.4 перечислены назначения всех представленных паттернов.
Ознакомьтесь с целью каждого паттерна, когда будете искать тот, что в наибольшей
степени относится к вашей проблеме. Чтобы сузить поиск, воспользуйтесь
схемой в таблице 1.1;
- изучите взаимосвязи паттернов. На рис. 1.1 графически изображены
соотношения между различными паттернами проектирования. Данная
информация поможет вам найти нужный паттерн или группы паттернов;
- проанализируйте паттерны со сходными целями. Каталог состоит из трех
частей: порождающие паттерны, структурные паттерны и паттерны
поведения. Каждая часть начинается со вступительных замечаний о паттернах
соответствующего вида и заканчивается разделом, где они сравниваются друг
с другом;
- разберитесь в причинах, вызывающих перепроектирование. Взгляните на
перечень причин, приведенный выше. Быть может, в нем упомянута ваша
проблема? Затем обратитесь к изучению паттернов, помогающих устранить эту
причину;
- посмотрите, что в вашем дизайне должно быть изменяющимся. Такой подход
противоположен исследованию причин, вызвавших необходимость
перепроектирования. Вместо этого подумайте, что могло бы заставить изменить
дизайн, а также о том, что бы вы хотели изменять без перепроектирования.
Акцент здесь делается на инкапсуляции сущностей, подверженные
изменениям, а это предмет многих паттернов. В таблице 1.2 перечислены те
аспекты дизайна, которые разные паттерны позволяют варьировать независимо,
устраняя тем самым необходимость в перепроектировании.
Как пользоваться паттерном проектирования
Как пользоваться паттерном проектирования, который вы выбрали для
изучения и работы? Вот перечень шагов, которые помогут вам эффективно
применить паттерн:
1. Прочитайте описание паттерна, чтобы получить о нем общее
представление. Особое внимание обратите на разделы «Применимость» и
«Результаты» - убедитесь, что выбранный вами паттерн действительно подходит для
решения ваших задач.
2. Вернитесь назад и изучите разделы «Структура», «Участники» и
«Отношения». Убедитесь, что понимаете упоминаемые в паттерне классы и объекты
и то, как они взаимодействуют друг с другом.
3. Посмотрите на раздел «Пример кода», где приведен конкретный пример
использования паттерна в программе. Изучение кода поможет понять, как
нужно реализовывать паттерн.
4. Выберите для участников паттерна подходящие имена. Имена участников
паттерна обычно слишком абстрактны, чтобы употреблять их
непосредственно в коде. Тем не менее бывает полезно включить имя участника как имя
в программе. Это помогает сделать паттерн более очевидным при
реализации. Например, если вы пользуетесь паттерном стратегия в алгоритме
размещения текста, то классы могли бы называться SimpleLayoutStrategy
TeXLayoutStrategy.
5. Определите классы. Объявите их интерфейсы, установите отношения
наследования и определите переменные экземпляра, которыми будут представлены
данные объекты и ссылки на другие объекты. Выявите имеющиеся в вашем
приложении классы, на которые паттерн оказывает влияние, и
соответствующим образом модифицируйте их.
6. Определите имена операций, встречающихся в паттерне. Здесь, как и в
предыдущем случае, имена обычно зависят от приложения. Руководствуйтесь
теми функциями и взаимодействиями, которые ассоциированы с каждой
операцией. Кроме того, будьте последовательны при выборе имен. Например,
для обозначения фабричного метода можно было бы всюду использовать
префикс Create-.
7. Реализуйте операции, которые выполняют обязанности и отвечают за
отношения, определенные в паттерне. Советы о том, как это лучше сделать, вы
найдете в разделе «Реализация». Поможет и «Пример кода».
Все вышесказанное - обычные рекомендации. Со временем вы выработаете
собственный подход к работе с паттернами проектирования.
Никакое обсуждение того, как пользоваться паттернами проектирования,
нельзя считать полным, если не сказать о том, как не надо их применять. Нередко
за гибкость и простоту изменения, которые дают паттерны, приходится платить
усложнением дизайна и ухудшением производительности. Паттерн
проектирования стоит применять, только когда дополнительная гибкость действительно
необходима. Для оценки достоинств и недостатков паттерна большую помощь
могут оказать разделы каталога «Результаты».
Содержание 1
Процесс разработки программного обеспечения 3
Основные принципы объектно-ориентированного программирования (начало) 12
История 14
Основные принципы объектно-ориентированного программирования (продолжение) 15
Главные понятия 15
Основные принципы 15
Абстракция данных 15
Инкапсуляция 16
Наследование 16
Основные принципы объектно-ориентированного программирования (окончание) 18
Полиморфизм 18
Отношения 19
Основы .NET Framework 22
Введение 22
Обзор выполнения кода в среде CLR 26
Компиляция исходного кода в управляемые модули 26
Части управляемого модуля 28
Объединение управляемых модулей в сборку 29
Загрузка CLR при выполнении программы 31
Исполнение кода сборки 31
IL и верификация 36
Небезопасный код 36
IL и защита интеллектуальной собственности 37
NGen.exe — генератор объектного кода 38
Библиотека классов .NET Framework 38
Общая система типов (Common Type System, CTS) 40
Общеязыковая спецификация 42
Модульное тестирование (unit testing) 44
Предпосылки 44
Преимущества 44
Поощрение изменений 45
Упрощение интеграции 45
Документирование кода 45
Отделение интерфейса от реализации 45
Ограничения 46
Как правильно писать тесты 46
Цикл разработки 46
Структура проекта с тестами 51
Утверждения (Asserts) 52
Утверждения в форме ограничений 54
Категории 56
Настройка среды выполнения тестов 57
Дополнительные утверждения 59
Тесты и исключения 60
Правила тестирования 62
Юнит-тестирование 70
Пример 70
Два вида констант 98
Операторы is, as и приведение типов 101
Метод ToString() 109
Типы-значения и ссылочные типы 117
Неизменяемые (Immutable) атомарные типы-значения 122
0 в типах-значениях 132
Методы ReferenceEquals(), Equals(), статический метод Equals() и operator== 134
Циклы foreach 140
Управление ресурсами в .NET 143
Инициализаторы переменных 149
Инициализация статических полей классов с помощью статических конструкторов 155
Цепочки конструкторов 157
Применение операторов using и try/finally для освобождения ресурсов 160
О минимизации мусора 167
Упаковка и распаковка 169
Наследование классов и реализация интерфейсов 171
Отличие реализации методов интерфейса от переопределения виртуальных методов 178
Введение в паттерны проектирования 184
Что такое паттерн проектирования 186
Паттерны проектирования в схеме MVC 188
Описание паттернов проектирования 190
Каталог паттернов проектирования 192
Как решать задачи проектирования с помощью паттернов 195
Механизмы повторного использования 204
Сравнение структур времени выполнения и времени компиляции 210
Проектирование с учетом будущих изменений 212
Как выбирать паттерн проектирования 220
Как пользоваться паттерном проектирования 221
Делегаты и события 226
Делегаты 226
События 230
Параметры событий 233
Атрибуты 237
Синтаксис 237
Создание атрибута 240
Составляющие класса атрибута 242
Получение значений атрибута 244
Задание 1 245
Задание 2 246
Обобщения 251
Проблемы создания объектных образов и восстановления значений 252
Типовая безопасность и строго типизованные коллекции 253
Проблемы создания объектных образов и строго типизованные коллекции 258
Пространство имен System.Collections.Generic 259
Тип List
Создание обобщенных методов 263
Пропуск параметров типа 265
Создание обобщенных структур (и классов) 267
Ключевое слово default в обобщенном программном коде 269
Создание пользовательских обобщенных коллекций 271
Установка ограничений для параметров типа с помощью where 274
Отсутствие поддержки ограничений при использовании операций 279
Создание обобщенных базовых классов 280
Создание обобщенных интерфейсов 282
Создание обобщенных делегатов 284
Несколько слов о вложенных делегатах 286
Задачи 286
Примеры реализации по шаблонам Мост+Фабрика 289
Пример 1 289
Пример 2 292
Пример 3. Контроллер в виде интерфейса, а не класса. 294
Различное поведение фабрик 298
Фабрики для создания плагинов 299
Фабрики для создания объектов по некоторому алгоритму 300
Фабрики для клонирования объектов 300
Некоторые замечания об использовании свойств и наследования 302
Замечания об использовании свойств 302
Замечания об использовании наследования. Проблема «хрупкого» базового класса. 304