12,99 €
Паттерны проектирования — удобный прием программирования для решения рутинных задач разработки ПО. Грамотное использование паттернов позволяет добиться соответствия любым требованиям и снизить расходы. В этой книге описаны эффективные способы применения паттернов проектирования с учётом специфики языка C# и платформы .NET Core. Кроме знакомых паттернов проектирования из книги «Банды четырех» вы изучите основы объектно-ориентированного программирования и принципов SOLID. Затем узнаете о функциональных, реактивных и конкурентных паттернах, с помощью которых будете работать с потоками и корутинами. Заключительная часть содержит паттерны для работы с микросервисными, бессерверными и облачно-ориентированными приложениями. Вы также узнаете, как сделать выбор архитектуры, например микросервисной или MVC. Вы научитесь - Повышать гибкость кода, используя принципы SOLID. - Применять разработку через тестирование (TDD) в ваших проектах на .NET Core. - Выполнять эффективную миграцию баз данных, обеспечивать долговременное хранение данных и их тестирование. - Преобразовывать консольное приложение в веб-приложение с помощью подходящего MVP. - Писать асинхронный, многопоточный и параллельный код. - Использовать парадигму MVVM и работать с RxJS и AngularJS для управления изменениями в базах данных. - Откроете для себя возможности микросервисов, бессерверного программирования и облачных вычислений.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Seitenzahl: 313
Veröffentlichungsjahr: 2023
Научный редактор М. Сагалович
Переводчики И. Пальти, Е. Сандицкая, С. Черников
Литературный редактор Н. Хлебина
Художник В. Мостипан
Корректоры Н. Гринчик, Е. Павлович, Е. Рафалюк-Бузовская
Гаурав Арораа, Джеффри Чилберто
Паттерны проектирования для C# и платформы .NET Core. — СПб.: Питер, 2021.
ISBN 978-5-4461-1523-5
© ООО Издательство "Питер", 2021
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Моей матери Лате Шримати Сантош и в память о моем отце, покойном Ш. Рамкришане, за их жертвенность и твердость духа. Моей младшей сестренке, также покойной крошке Канчан, за ее любовь и за то, что была моим маленьким талисманом.
Гаурав Арораа
Моим родителям Френсис и Джойс которые неустанно поднимали на ноги своих детей с любовью, заботой и добротой. Моим братьям: Джеку — за мотивацию сохранять спокойствие в череде испытаний и Майку — за напоминание остановиться и насладиться жизнью.
Джеффри Чилберто
При разработке качественного ПО программисты стремятся избегать дублирования кода. Мы весьма часто применяем прием DRY — Don’t Repeat Yourself («Не повторяйся») — даже не задумываясь! Разработчики обычно разделяют функциональность, создают многократно используемые методы и пишут вспомогательные классы. Паттерны проектирования создавались и обновлялись годами. Это полезные, общепринятые и пригодные к многократному применению решения повседневных проблем.
Гаурав и Джеффри собрали лучшие и наиболее широко используемые паттерны и применили их в мире открытого C# и .NET Core. Вы начнете с ООП, классов, объектов и будете продвигаться далее к наследованию, инкапсуляции и полиморфизму. Авторы описали такие подходы, как DRY, KISS и SOLID (вы очень скоро поймете, что все это значит!), и применили их к классическим паттернам, которые помогут вам разрабатывать чистое и надежное программное обеспечение.
Книга содержит примеры рабочего кода, которые покажут, как использовать получаемые знания в создании ПО на .NET Code и C# в наши дни. Вы освоите паттерны «Строитель», «Декоратор», «Фабрика», «Посетитель», «Стратегия» и многие другие.
Эти методики будут применены сначала к простой программе, а затем к веб-приложениям. Далее будут рассмотрены более сложные темы, включая конкурентность и параллелизм. Наконец, вы сможете воспользоваться паттернами на принципиально более высоком уровне, применяя решения, которые помогут вам переместить проекты в облако, где их можно будет масштабировать и легко обслуживать.
Надеюсь, что, как и я, вы по достоинству оцените эту книгу. Желаю получать удовольствие, работая с .NET Core, так же, как получали его мы, когда разрабатывали эту среду!
Скотт Хансельман, руководитель партнерской программы Microsoft .NET и Open Source Community
Эта книга — библия для каждого разработчика, желающего не только улучшить свои навыки программирования, но и, самое главное, научиться создавать надежные, масштабируемые и удобные в сопровождении решения. Здесь описана большая часть практических рекомендаций, дополненных наглядными примерами.
Помимо паттернов проектирования, книга затрагивает архитектурные принципы и ключевые моменты работы в облаке, такие как безопасность и масштабирование.
Будучи архитектором решений, я ежедневно проектирую комплексные приложения, уделяя особое внимание разработке инфраструктур и инструментов, и все же поражаюсь качеству контента и охвату тем, представленных в этой книге. В ней содержится исчерпывающий список паттернов, рекомендуемых к ознакомлению всем, кто связан с разработкой и развертыванием ПО.
Такое полное и глубокое погружение в мир объектно-ориентированного программирования (ООП) и .NET Core полезно всем, кто заинтересован в разработке лучших приложений.
Стефани Айскенс, Azure MVP
Гаурав Арораа получил степень магистра в области компьютерных наук, имеет сертификаты Microsoft MVP, Alibaba Cloud MVP, тренера/коуча по Scrum. Член Компьютерного сообщества Индии (CSI), сотрудник IndiaMentor, сертифицированный специалист ITIL Foundation, APMG PRINCE-F и APMG PRINCE-P. Гаурав — разработчик открытого программного обеспечения, внесший вклад в развитие TechNet Wiki и основавший компанию Ovatic Systems Private Limited. За свою более чем 20-летнюю карьеру он обучил тысячи студентов. Вы можете написать Гаураву в Twitter по адресу @g_arora.
Спасибо моей жене Шуби Арораа и моему ангелу (дочери) Аачи Арораа, которые вытерпели мое отсутствие, пока я писал эту книгу. Спасибо всей команде Packt, особенно Чайтаньи, Акшите и Нее, координационная деятельность и коммуникабельность которых были так необходимы, а также Дениму Пинто, порекомендовавшему меня в качестве потенциального автора.
Джеффри Чилберто — консультант в сфере разработки программного обеспечения, специализирующийся на технологическом стеке Microsoft, включая Azure, BizTalk, ASP.NET, MVC, WCF и SQL Server, с опытом работы в различных сферах. Он участвовал в разработке банковских, телекоммуникационных и медицинских систем в Новой Зеландии, Австралии и США. Имеет степень бакалавра в области информационных и компьютерных наук, а также степень магистра по информационным технологиям и вычислительной технике.
Хотел бы поблагодарить мою семью за любовь, поддержку и вдохновение.
Сьеки Цааль — консультант по управлению, архитектор облачных систем Microsoft и Microsoft Azure MVP с более чем 15-летним стажем в области создания архитектур, разработки, консультирования и системного дизайна. Она работает в Capgemini — одной из крупнейших в мире консалтинговых компаний в сфере менеджмента и информационных технологий. Сьеки любит делиться знаниями и принимает очень активное участие в сообществе Microsoft как одна из основателей нидерландских пользовательских групп SP&C NL и MixUG. Кроме того, является членом правления Azure Thursdays. Сьеки часто выступает с лекциями и участвует в организации мероприятий. Она написала несколько книг, ведет блоги и принимает активное участие в сообществе Microsoft Tech Community (https://techcommunity.microsoft.com/).
У Эфраима Кирякидиса за плечами более 20 лет опыта в разработке ПО. Он получил диплом инженера в Университете имени Аристотеля в Салониках (Греция). Эфраим пользуется .NET с момента создания, с версии 1.0. В своей работе он в целом сфокусирован на технологиях Microsoft. В данный момент занимает пост старшего инженера в компании Siemens AG в Германии.
В этой книге на конкретных примерах описываются способы использования паттернов в современной разработке приложений. Количество паттернов, применяемых для поиска решений, огромно. Чаще всего разработчики пользуются ими, не понимая в полной мере, что и как эти паттерны делают. В издании рассматриваются паттерны от низкоуровневого кода до высокоуровневых концептуальных решений, которые работают в облачных системах.
Несмотря на то что большинство паттернов не требуют применения конкретного языка, для иллюстрации многих из них мы используем C# и .NET Core. Эти технологии были выбраны из-за их популярности и удобства архитектуры, на основе которой можно создавать различные решения — от простых консольных приложений до крупных корпоративных распределенных систем.
Описывая большое количество паттернов, эта книга знакомит со многими из них, позволяет глубже понять их на практике. Представленные паттерны были выбраны, чтобы проиллюстрировать определенные аспекты проектирования. Кроме того, добавлены ссылки на дополнительные материалы, которые помогут читателю подробнее изучить конкретный интересующий его паттерн.
И в простых сайтах, и в огромных корпоративных системах правильно подобранный паттерн может в корне изменить заведомо неверное решение, ведущее к краху проекта из-за его высокой стоимости и низкой производительности, и превратить это решение в выгодное, долгоживущее и успешное. Паттерны, описанные в книге, призваны преодолеть неизбежные проблемы, которые иначе не позволили бы вам оставаться конкурентоспособными. Они также позволят вашим приложениям достичь устойчивости и надежности, которыми должны обладать современные проекты.
Целевая аудитория — разработчики современных приложений. Поскольку книга содержит много кода, чтобы объяснить, как и где используются паттерны, подразумевается наличие у читателя опыта в разработке ПО. Не стоит рассматривать данную книгу как «программирование для чайников», скорее она отвечает на вопрос «Как программировать лучше». Поэтому издание будет полезно начинающим и опытным программистам, архитекторам приложений и проектировщикам.
Глава 1 описывает объектно-ориентированное программирование и его применение в среде C#. Эта глава служит напоминанием о важных конструкциях и функциях ООП и С#, включающих наследование, инкапсуляцию и полиморфизм.
Глава 2 каталогизирует и представляет различные паттерны, используемые в современной разработке программного обеспечения. Эта глава исследует ряд паттернов и их каталогов, таких как SOLID, паттерны «Банды четырех» и паттерны корпоративной интеграции. Вдобавок в ней обсуждаются жизненный цикл и другие методики разработки ПО.
Глава 3 погрузит в паттерны проектирования, используемые для создания приложений на C#. На примере приложения-образца будут показаны разработка через тестирование, концепция продукта с минимальным функционалом и некоторые паттерны «Банды четырех».
Глава 4 продолжит знакомить с паттернами, используемыми в приложениях на C#. Будут введены такие понятия, как внедрение зависимости и инверсия управления, а также продолжится изучение паттернов проектирования, включая «Одиночку» и «Фабрику».
Глава 5 основана на главах 3 и 4 и описывает паттерны в .NET Core. Некоторые паттерны, включая «Внедрение зависимости» и «Фабрику», будут также пересмотрены с учетом среды .NET Core.
Глава 6 продолжает знакомить с .NET Core, описывая функции, поддерживаемые в разработке веб-приложений, в процессе создания тестового приложения. Эта глава содержит руководство по созданию базового веб-приложения, представляет важные характеристики, которыми оно должно обладать, и рассказывает, как создавать веб-страницы с поддержкой CRUD.
Глава 7 тоже посвящена разработке веб-приложений с помощью .NET Core и представляет различные архитектурные паттерны, а также варианты решений вопроса безопасности. Кроме того, описывает аутентификацию и авторизацию, а также модульные тесты с использованием Moq — фреймворка для создания имитаций реальных объектов.
Глава 8углубляется в разработку веб-приложений и описывает понятие «конкурентность» при разработке приложений на C# и .NET Core. Будет рассмотрен паттерн async/await, а также многопоточность и конкурентность, которым посвящен отдельный раздел. Кроме того, речь пойдет о Parallel LINQ с отложенным запуском и приоритетом потоков.
Глава 9 описывает функциональное программирование в .NET Core. Сюда входят функции языка C#, поддерживающие функциональное программирование, и их применение в тестовом приложении вместе с паттерном «Стратегия».
Глава 10 продолжает тему разработки веб-приложений .NET Core с помощью паттернов реактивного программирования и методик, используемых для создания адаптивных и масштабируемых сайтов. Глава описывает принципы реактивного программирования, включая паттерны Reactive и IObservable. Кроме того, рассматривает различные фреймворки, включая популярный проект .NET Rx Extensions, а также демонстрирует паттерн «Модель — представление — модель представления» (Model — View — View Model, MVVM).
Глава 11 освещает паттерны, используемые в проектировании баз данных, а также описывает сами БД. Будет показан практический пример применения паттерна CQRS, в том числе с помощью проектирования базы данных в виде журнала учета.
Глава 12 представляет разработку приложений в контексте облачных решений, включая пять ключевых аспектов: масштабирование, доступность, безопасность, проектирование приложений и DevOps. Будут описаны важнейшие паттерны, используемые в облачно-ориентированных решениях, включая различные типы масштабирования, и представлены паттерны, применяемые для событийно-ориентированных архитектур, интегрированной безопасности, кэша и телеметрии.
Приложение А содержит обсуждение дополнительных паттернов и практические рекомендации. Сюда включены разделы о моделировании примеров использования, рекомендованных методик и дополнительных паттернов, таких как пространственная архитектура и контейнерные приложения.
Приложение Б дает ответы на вопросы, размещенные в конце каждой главы.
Предполагается, что вы уже немного знакомы с принципами ООП и языком C#. В книге описываются продвинутые темы, однако материал нельзя воспринимать как пошаговую инструкцию к применению. Цель издания — улучшить навыки разработчиков и проектировщиков с помощью широкого спектра паттернов, методик и принципов. По аналогии с ящиком для инструментов книга предлагает современным разработчикам эти самые инструменты для перехода от низкоуровневого проектирования к созданию более высокоуровневых архитектур, а также важные паттерны и принципы, широко используемые в настоящий момент.
Вдобавок эта книга обращает внимание на следующие моменты, призванные дополнить знания читателя:
• знание принципов SOLID, практические рекомендации с примерами кода на C#7.x и NET Core 2.2;
• углубленное понимание классических паттернов проектирования (от «Банды четырех»);
• принципы функционального программирования и рабочие примеры на языке C#;
• реальные примеры архитектурных паттернов (MVC, MVVM);
• понимание облачной ориентированности, микросервисов и пр.
Вы можете скачать примеры из этой книги на GitHub по ссылке github.com/PacktPublishing/Hands-On-Design-Patterns-with-C-and-.NET-Core. В случае обновления кода примеры также будут обновлены в репозитории.
Перейдите по ссылкеbit.ly/2KuuNgQ, чтобы просмотреть видео с примерами кода.
Мы также предоставляем PDF-файл с цветными изображениями схем и рисунков, используемыми в оригинале данной книги: static.packt-cdn.com/downloads/9781789133646_ColorImages.pdf.
В книге используется ряд условных обозначений.
Моноширинным шрифтом обозначены код в тексте, имена таблиц баз данных и т.п. Например: «В данном классе есть три метода: CounterA(), CounterB() и CounterC(), представляющих отдельную стойку для получения билетов».
Блок кода (листинг) оформляется так:
3-counters are serving...
Next person from row
Person A is collecting ticket from Counter A
Person B is collecting ticket from Counter B
Person C is collecting ticket from Counter C
Когда мы хотим обратить ваше внимание на конкретную часть листинга, то необходимые и ключевые строки выделяем полужирныммоноширинным шрифтом:
public bool UpdateQuantity(string name, int quantity)
{
lock (_lock)
{
_books[name].Quantity += quantity;
}
return true;
}
Любой ввод и вывод в оболочке командной строки выглядит следующим образом:
dotnet new sln
Курсивным шрифтом обозначены новые термины и важные слова.
URL, команды меню, элементы управления и заголовки окон выделяются шрифтом без засечек, например: «Команда Create New Product (Создать новый продукт) позволит добавить новый продукт, а Edit (Редактировать) — изменять и обновлять уже имеющиеся продукты».
Важные замечания и предупреждения обозначены так.
Советы и подсказки обозначены таким образом.
Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
В этой части книги вы по-новому взглянете на паттерны проектирования. Мы изучим такие темы, как ООП, паттерны, методики и принципы SOLID. К концу части вы сможете самостоятельно создавать собственные паттерны.
Часть I состоит из таких глав:
• глава 1 «Обзор ООП в .NET Core и C#»;
• глава 2 «Современные паттерны и принципы проектирования ПО».