Главная » C# » Компонентно-ориентированная архитектура в Visual C# (Sharp)

0

До настоящего времени мы изучали основы языка С#. Владея данными основами, вы можете писать функциональные  приложения, использующие  классы,  объекты, интерфейсы и наследование. В данной главе мы рассмотрим метод программирания, который некоторые разработчики называют конструкционным. Конструионное программирование применяется, когда нужно решить не рабочую проблу, а проблему, связанную с созданием приложения.

Другой целью, преследуемой в данной главе, является помочь вам  набраться опыта в разработке компонентно-ориентированного кода. В частности мы рассмотрим, как создавать ядро. Разработка ядра позволит нам увидеть мощь и гибкость компонентнриентированного подхода к разработке приложений. При таком подходе мы мет создать полностью функциональную систему, даже если мы  не знаем наперед все возможные реализации.  Данный  метод позволяет разбить  процесс  разработки на модули, в том смысле, что индивидуальные команды занимаются разработкой определенных интерфейсов. А когда все компоненты реализованы,  они  собиртся  вместе подобно частям мозаики. Конечно же, само применение интерфейсов и компонентов не является гарантией успеха, но таким образом мы добиваемся то, что одной команде не нужно ожидать, пока другая команда закончит работу над своей частью кода.

Кроме этого мы рассмотрим две другие концепции программирования в С# — иексаторы и оператор yield. Индексаторы применяются для обращения к однороым полям объекта как к элементам массива. Ключевое слово yield используется совместно с ключевым словом foreach для обработки в цикле типов, которые, воожно, не поддерживают коллекции.

Для демонстрации всех этих концепций мы создадим приложение для управления освещением в здании, применяя при этом подход программирования ядра.

Понятие ядра

Допустим, что вам надоели ваши огромные счета за электричество, и вы хотите найти способ уменьшить потребление электричества. Одним из способов осущесления  этого желания  будет автоматизировать систему освещения  в  вашем доме,

чтобы освещение было включено только тогда, когда оно нужно. Для этого вам потребуется контроллер и управляемые им устройства.

Контроллер управляет устройствами, о которых он не знает наперед, посредством выполнения контракта. Контроллер, управляющий системой освещения, в прраммировании называется ядром, так он не знает наперед, освещение в каких комнатах он будет контролировать. Эти информация становится доступной ему только тогда, когда он фактически применяется для управления системой освещия. Подход на основе программирования ядра заключается в разработке базовой функциональности. Базовая функциональность не способна работать самостоельно, т. к. она полагается на другие компоненты приложения. Это называется разработкой компонентов, которые используют интерфейсы и реализации.

Компоненты реализуются на техническом уровне, используя интерфейсы и проиодные от них классы. Интерфейс представляет идею, а его производный класс реализует данную  идею.  Один  класс  может  реализовать  несколько  интерфейсов, в то время как каждый интерфейс представляет уникальную характеристику клаа. Идеи и интерфейсы также представляют контракты или стандарты. Ядро опреляет стандарт, а компонент обязан реализовать данный стандарт.

Процесс реализации ядра подобен работе тренера футбольной команды. Тренер продумывает, какого игрока поставить играть в какой позиции, а также разрабатает стратегии, которые игроки должны реализовать. Но  во  время  фактической игры игроки делают то, что они считают нужным или лучшим при данных обстоельствах, а тренер обычно не в силах оказать на их поведение какого-либо сущтвенного влияния. Тренер может обучать игроков,  но применение полученных от тренера знаний зависит от каждого индивидуального игрока.

Применительно к программированию, ядро является тренером, а манипулируемые внешние реализации — игроками. При разработке интерфейсов, которые будут реализованы другими функциональными компонентами,  мы  не можем  наблюдать за разрабатывающими их программистами, с тем, чтобы они делали все так, как мы считаем нужным. Данная ситуация требует доверия, но нам также нужно реализать такой режим программирования, при котором мы можем полагать, что прраммисты будут выполнять возложенные на них задачи должным образом. Это не имеет  ничего  общего  с  индивидуальными  возможностями  этих  программистов. Я имею в  виду, что мы должны быть уверенными  в том,  что даже если  кто-либо из них и сделает какую-либо ошибку, наше ядро будет продолжать работать долым образом.

Помните, что при реализации ядра мы реализуем контроллер и разрабатываем стрегию приложения, но не имеем отношения ко всем внешним реализациям.

Если при разработке коммерческого приложения вас назначили ответственным за создание ядра, то считайте, что вам крупно повезло. Но не забывайте, что вместе с высоким доверием на вас также возлагается большая ответственность. Если ваше ядро плохо спроектировано или содержит ошибки, то внешние реализации также будут содержать ошибки и, возможно, будут плохо спроектированы. Ядро является одновременно и краеугольным камнем, и фундаментом всего приложения.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии