Главная » C# » Создание полного приложения управления освещением в Visual C# (Sharp)

0

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

Идея заключается в том, чтобы позволить разработчику добавлять функционалость к ядру, не затрагивая само ядро. Для примера рассмотрим определение двух комнат в музее (в проекте Museum).

ПРИМЕЧАНИЕ

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

Определение комнат

Определения  комнат  выполняются  в  отдельной  сборке,  называющейся  Museum, и не являются частью  ядра.  Далее  приводится  пример  кода реализации  комнаты. Не забудьте  вставить  ссылку  на  LibLightingSystem (щелкните  правой  кнопкой по пункту References в проекте Museum и  выберите  последовательность  команд Add Reference | Projects | LibLightingSystem).

using LibLightingSystem; namespace Museum

{

class PrivateRoom : INoRemoteControlRoom {

}

class PublicRoom : ISensorRoom { public bool IsPersonlnRoom {

get { return false; }

}

double _lightLevel;

public double LightLevel { get { return _lightLevel; }

}

public void LightSwitch(bool lightState) { if (lightState) {

_lightLevel = 1.0;

}

else {

_lightLevel = 0.0;

}

public void DimLight(double level) {

_lightLevel = level;

}

}

}

Область видимости обоих определений комнат, PrivateRoom и PublicRoom, огранена сборкой. Для каждой комнаты реализуется требуемый для нее интерфейс. Для комнаты PrivateRoom реализуется интерфейс iNoRemoteControlRoom. Это означает, что LightingController не управляет освещением в данной комнате.

Для комнаты PublicRoom реализуется интерфейс isensorRoom. Это означает, что данная комната будет сообщать контроллеру, когда в ней находятся люди, и позвяет ему контролировать освещение в ней. Реализация класса PublicRoom тривльна и, честно говоря, не очень полезна, но она иллюстрирует реализацию абсютного минимума требуемых возможностей. В реальной жизни класс PublicRoom имел бы доступ, по крайней мере, к таким внешним устройствам, как датчик теературы и управляющие элементы освещения. Класс PublicRoom отправляет и пучает сигналы от LightingController и выполняет действия. В круг ответствеостей класса PublicRoom не входит интересоваться, правильно ли данное решение контроллера или нет. Например, если контроллер указывает выключить освещение, хотя в комнате находятся люди, класс PublicRoom не будет докладывать об этом контроллеру, а просто выполнит его указание.

ПРИМЕЧАНИЕ

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

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

По теме:

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