Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (+ CD-ROM)
Кржиштоф Цвалина, Брэд Абрамс
Издание позволит разработчикам освоить лучшие приемы разработки многократно используемых библиотек для Microsoft .NET Framework. Расширенное и обновленное для .NET 3.5, это новое издание фокусирует внимание на разработке тех частей, которые непосредственно определяют применение в программах библиотеки классов, особенно общедоступных API.
Книга облегчит работу любого .NET-разработчика, который разрабатывает код, предназначенный для других разработчиков. Она содержит аннотации к правилам, принадлежащие тридцати пяти выдающимся архитекторам и программистам .NET Framework, оживленные обсуждения причин, по которым были введены данные правила, а также примеры, показывающие, когда можно нарушить обсуждаемые правила.
Издательство: Вильямс, 2011 г.
ISBN 978-5-8459-1692-1, 978-0-321-54561-9
Количество страниц: 416.
Содержание книги «Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (+ CD-ROM)»:
- 17 Предисловие
- 19 Предисловие к первому изданию
- 21 Предисловие
- 25 Благодарности
- 27 Об авторах
- 29 О комментаторах
- 37 1 Введение
- 39 1.1. Характеристики правильно спроектированной инфраструктуры
- 39 1.1.1. Правильно спроектированные инфраструктуры просты
- 40 1.1.2. Правильно спроектированные инфраструктуры обходятся дорого
- 40 1.1.3. Правильно спроектированные инфраструктуры полны компромиссов
- 41 1.1.4. Учет опыта в правильно спроектированных инфраструктурах
- 41 1.1.5. Правильно спроектированные инфраструктуры проектируются так, чтобы их можно было расширить
- 42 1.1.6. Правильно спроектированные инфраструктуры интегрированы
- 42 1.1.7. Правильно спроектированные инфраструктуры непротиворечивы
- 39 1.1. Характеристики правильно спроектированной инфраструктуры
- 43 2 Основные принципы разработки инфраструктуры
- 45 2.1. Прогрессивные инфраструктуры
- 48 2.2. Фундаментальные принципы разработки инфраструктуры
- 49 2.2.1. Принцип дизайна, основанного на сценариях
- 54 2.2.2. Принцип низкого барьера для доступа
- 59 2.2.3. Принцип самодокументирования объектных моделей
- 65 2.2.4. Принцип многоуровневой архитектуры
- 69 3 Рекомендации по обозначениям
- 70 3.1. Соглашения о прописных буквах
- 70 3.1.1. Правила использования прописных букв в идентификаторах
- 72 3.1.2. Набор акронимов прописными буквами
- 74 3.1.3. Использование прописных букв в составных словах и общепринятых терминах
- 75 3.1.4. Чувствительность к регистру
- 76 3.2. Общие соглашения об именах
- 77 3.2.1. Выбор слов
- 79 3.2.2. Использование сокращений и акронимов
- 79 3.2.3. Избегайте названий, специфических для языка
- 81 3.2.4. Обозначение новых версий для существующих API
- 83 3.3. Названия сборок и DLL
- 85 3.4. Названия пространств имей
- 86 3.4.1. Пространства имен и конфликты с именами типов
- 88 3.5. Названия классов, структур и интерфейсов
- 91 3.5.1. Названия параметров универсальных типов
- 92 3.5.2. Названия общих типов
- 93 3.5.3. Обозначение перечислений
- 95 3.6. Имена членов типа
- 95 3.6.1. Названия методов
- 95 3.6.2. Названия свойств
- 97 3.6.3. Названия событий
- 98 3.6.4. Обозначение полей
- 99 3.7. Обозначение параметров
- 100 3.7.1. Обозначение параметров перегружаемых операторов
- 100 3.8. Обозначение ресурсов
- 70 3.1. Соглашения о прописных буквах
- 103 4 Рекомендации по разработке типов
- 105 4.1. Типы и пространства имен
- 108 4.1.1. Стандартные названия подпространств имен
- 110 4.2. Выбор между классом и структурой
- 113 4.3. Выбор между классом и интерфейсом
- 119 4.4. Дизайн абстрактных классов
- 121 4.3. Разработка статических классов
- 122 4.6. Проект интерфейса
- 124 4.7. Разработка структур
- 126 4.8. Разработка перечислений
- 132 4.8.1. Проектирование перечислений флажков
- 136 4.8.2. .Добавление значений к перечислениям
- 137 4.9. Вложенные типы
- 139 4.10. Типы и метаданные шорки
- 105 4.1. Типы и пространства имен
- 141 5 Проектирование членов
- 141 5.1. Общие рекомендации по разработке членов
- 141 5.1.1. Перегрузка членов
- 147 5.1.2. Явная реализация членов интерфейса
- 151 5.1.3. Выбор между свойствами и методами
- 156 5.2. Разработка свойств
- 158 5.2.1. Разработка индексированных свойств
- 159 5.2.2. События, уведомляющие об изменении свойств
- 161 5.3. Разработка конструкторов
- 166 5.3.1. Рекомендации для конструктора типов
- 168 5.4. Разработка событий
- 173 5.4.1. Разработка обработчика событий пользователем
- 174 5.5. Разработка полей
- 176 5.6. Методы расширения
- 181 5.7. Перегрузка операторов
- 185 5.7.1. Перегрузка оператора operator==
- 185 5.7.2. Операторы преобразования
- 187 5.8. Разработка параметров
- 189 5.8.1. Выбор между перечислениями и булевыми параметрами
- 190 5.8.2. Проверка правильности параметров
- 193 5.8.3. Передача параметров
- 196 5.8.4. Члены с переменным числом параметров
- 199 5.8.5. Параметры-указатели
- 141 5.1. Общие рекомендации по разработке членов
- 201 6 Проектирование с целью расширяемости
- 201 6.1. Механизмы расширяемости
- 202 6.1.1. Негерметичные классы
- 203 6.1.2. Защищенные члены
- 204 6.1.3. События и обратные вызовы
- 208 6.1.4. Виртуальные члены
- 210 6.1.5. Абстракции (абстрактные типы и интерфейсы)
- 212 6.2. Базовые классы
- 214 6.3. Герметизация
- 201 6.1. Механизмы расширяемости
- 217 7 Исключения
- 221 7.1. Вызов исключения
- 226 7.2. Выбор правильного типа вызываемого исключения
- 229 7.2.1. Разработка сообщений об ошибках
- 231 7.2.2. Обработка особых ситуаций
- 235 7.2.3. Обертывание исключений
- 237 7.3. Использование стандартных типов исключений
- 237 7.3.1. Исключения Exception и SystemException
- 237 7.3.2. Исключение ApplicationException
- 238 7.3.3. Исключение InvalidOperationException
- 238 7.3.4. Исключения ArgumentException, ArgumentNullException и ArgumentOutOfRangeException
- 239 7.3.5. Исключения NullReferenceException, IndexOutOfRangeException и AccessViolationException
- 240 7.3.6. Исключение StackOverflowException
- 240 7.3.7. Исключение OutOfMemoryException
- 241 7.3.8. Исключения ComException, SEHException и ExecutionEngineException
- 241 7.4. Проектирование пользовательских исключений
- 243 7.5. Исключения и производительность
- 243 7.5.1. Шаблон Tester-Doer)
- 244 7.5.2. Шаблон Try-Parse)
- 247 8 Рекомендации по использованию
- 247 8.1. Массивы
- 249 8.2. Атрибуты
- 251 8.3. Коллекции
- 253 8.3.1. Параметры-коллекции
- 254 8.3.2. Свойства коллекции и возвращаемые значения
- 257 8.3.3. Выбор между массивами и коллекциями
- 258 8.3.4. Реализация пользовательских коллекций
- 260 8.4. Типы DateTime и DateTimeOffset
- 262 8.5. Интерфейс ICloneable
- 263 8.6. IComparable<T> и IEquatable<T>
- 265 8.7. IDisposable
- 265 8.8. Nullable<T>
- 266 8.9. Объект Object
- 266 8.9.1. Object.Equals
- 268 8.9.2. Хеш-функция Object.GetHashCode
- 269 8.9.3. Метод Object.ToString
- 271 8.10. Сериализация – преобразование в последовательную форму
- 272 8.10.1. Выбор подходящей для поддержки технологии преобразования в последовательную форму
- 273 8.10.2. Поддержка преобразования в последовательную форму в соответствии с контрактом данных
- 277 8.10.3. Поддержка преобразования в последовательную XML-форму
- 278 8.10.4. Поддержка преобразования в последовательную форму во время выполнения
- 280 8.11. Тип Uri
- 281 8.12. Использование System.Xml
- 282 8.13. Операторы равенства
- 283 8.13.1. Операторы равенства па типах значений
- 283 8.13.2. Операторы равенства па ссылочных типах
- 285 9 Общие шаблоны проектирования
- 285 9.1. Составные компоненты
- 287 9.1.1. Компонентно-ориентированный дизайн
- 289 9.1.2. Факторизованные компоненты
- 290 9.1.3. Рекомендации по объединению составляющих
- 293 9.2. Асинхронные шаблоны Async
- 293 9.2.1. Выбор одною из асинхронных шаблонов Async
- 295 9.2.2. Классический асинхронный шаблон Classic Async
- 298 9.2.3. Пример базовой реализации классического асинхронного шаблона Classic Async
- 299 9.2.4. Основанный на событиях асинхронный шаблон Event-Based Async
- 301 9.2.5. Поддержка out- и ref-параметров
- 301 9.2.6. Поддержка отмены
- 302 9.2.7. Поддержка сообщения о продвижении
- 304 9.2.8. Поддержка приращений – возрастающих результатов
- 304 9.3. Зависимые свойства
- 305 9.3.1. Разработка зависимых свойств
- 307 9.3.2. Разработка прикрепленных зависимых свойств
- 308 9.3.3. Проверка правильности зависимого свойства
- 309 9.3.4. Уведомления об изменении зависимого свойства
- 310 9.3.5. Приведение тина данных значения зависимого свойства
- 311 9.4. Шаблон освобождения Dispose
- 313 9.4.1. Основной шаблон освобождения Basic Dispose
- 318 9.4.2. Финализируемые типы
- 322 9.5. Фабрики
- 325 9.6. Поддержка LINQ
- 326 9.6.1. Краткий обзор LINQ
- 327 9.6.2. Способы реализации поддержки LINQ
- 327 9.6.3. Поддержка LINQ через IEnumerable<T>
- 328 9.6.4. Поддержка LINQ через IQueryable<T>
- 329 9.6.5. Поддержка LINQ через шаблон запроса Query
- 331 9.7. Шаблон дополнительных возможностей Optional Feature
- 335 9.8. Моделирование ковариации
- 340 9.9. Шаблон Template Method
- 341 9.10. Тайм-аут (истечение времени ожидания)
- 343 9.11. Читаемые XAML-типы
- 345 9.12. И в заключение...
- 285 9.1. Составные компоненты
- 347 А. Соглашения о стиле кодирования в С#
- 348 А.1. Общие соглашения о стиле
- 348 А.1.1. Использование скобок
- 349 А.1.2. Использование пробелов
- 350 А.1.3. Использование отступов
- 350 А.1.4. Другое
- 351 А.2. Соглашения об именах
- 351 А.3. Комментарии
- 352 А.4. Организация файлов
- 348 А.1. Общие соглашения о стиле
- 355 Б Использование FxCop для проверки рекомендаций по разработке инфраструктур
- 355 Б.1. Что такое FxCop
- 356 Б.2. Развитие FxCop
- 357 Б.3. Как это работает
- 357 Б.4. Описание руководства по FxCop
- 357 Б.4.1. Правила FxCop для рекомендаций по обозначениям
- 366 Б.4.2. Правила FxCop для разработки типа
- 369 Б.4.3. Правила FxCop по разработке членов
- 375 Б.4.4. Правила FxCop для проектирования расширяемости
- 375 Б.4.5. Правила FxCop для исключении
- 378 Б.4.6. Правила FxCop по использованию инфраструктуры
- 382 Б.4.7. Правила FxCop для шаблонов разработки Design Patterns
- 385 В Пример спецификации API
- 385 1. Требования
- 386 2. Спецификации API
- 386 2.1. Сценарии
- 387 2.2. Разработка API
- 388 3. Функциональные спецификации
- 393 Глоссарий
- 399 Список рекомендуемой литературы
- 403 Предметный указатель
Инструкция как скачать книгу Кржиштоф Цвалина, Брэд Абрамс: Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (+ CD-ROM) в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.