Не трогайте мышь и отойдите от клавиатуры





Скачать 360.39 Kb.
НазваниеНе трогайте мышь и отойдите от клавиатуры
страница5/8
Дата публикации21.08.2013
Размер360.39 Kb.
ТипДокументы
100-bal.ru > Философия > Документы
1   2   3   4   5   6   7   8

Принцип единственности ответственности


Роберт Мартин (Robert C. Martin – «Uncle Bob»)

Вот один из наиболее фундаментальных принципов хорошего проекта:

Собрать вместе то, что изменяется по одной и той же причине, и разделить то, что изменяется по разным причинам.

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

public class Employee {

public Money calculatePay() ...

public String reportHours() ...

public void save() ...

}

Есть программисты, считающие, что расположение этих трех функций в одном классе вполне уместно. В конце концов, классы и должны собирать вместе функции, оперирующие с одними и теми же переменными. Однако проблема в том, что все три функции изменяются по совершенно разным причинам. Функция calculatePay изменяется вместе с бизнес-правилами расчета заплаты. Функция reportHours изменяется, когда требуется другой формат отчета. Функция save изменяется, когда администратор базы данных меняет ее схему. В совокупности эти три причины делают Employee очень неустойчивым. Он будет меняться по каждой из этих причин. Еще более важно, что эти изменения затронут любые классы, которые зависят от Employee.

В хорошем проекте система разделена на компоненты, которые можно развернуть независимо. Независимость развертывания означает, что если изменить одну компоненту, не придется заново разворачивать другие. Но если Employee интенсивно используется многими классами в других компонентах, то каждое изменение Employee может потребовать повторного развертывания других компонент, что сводит на нет основное преимущество компонентной конструкции (или SOA, если вам нравится это более модное название) (SOAservice oriented architecture,не все это могут знать, может надо было написать «компонентной архитектуры»). Следующее простое разделение решает проблему:

public class Employee {

public Money calculatePay() ...

}

public class EmployeeReporter {

public String reportHours(Employee e) ...

}

public class EmployeeRepository {

public void save(Employee e) ...

}

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

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

Аккуратное применение принципа SRP, предполагающего разделение вещей, которые изменяются по разным причинам, является одной из основ создания проектов со структурой независимо разворачиваемых компонент. Хорошая познавательная глава.

Сначала скажите «да»


Alex Miller (Алекс Миллер)

Недавно я был в продуктовом магазине и обыскался там «эдамаме» - зеленых соевых бобов - (я приблизительно догадывался, что это какие-то овощи). Я не знал, где мне искать этот продукт: в овощном отделе, в отделе замороженных продуктов или на полках с консервами? Наконец я сдался и обратился за помощью к работнице магазина. Она тоже не знала!

Эта работница могла отреагировать на мою просьбу разными способами. Она могла дать мне понять, что только дурак не знает, где это искать, ответить мне расплывчатым образом, или даже сказать, что у них нет такого товара. Но она отнеслась к моей просьбе с желанием найти решение и помочь покупателю. Она позвала других работников, и через несколько минут отвела меня к тому товару, который я искал. «Эдамаме» оказались в отделе замороженных продуктов.

В этом случае работница выслушала просьбу и стала руководствоваться посылом, что нужно решить проблему и удовлетворить просьбу. Она начала с «да», а не с «нет».

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

В какой-то момент на меня нашло прозрение и я подумал, что возможен другой подход к работе, который отличался от моего всего лишь начальным «да» вместо начального «нет». Фактически, я пришел к убеждению, что техническому руководителю необходимо начинать разговор с «да».

Эта простая перемена радикально изменила мой подход к работе. Оказалось, существует много способов говорить «да». Когда кто-то говорит тебе: «Послушай, это будет классное приложение, если мы сделаем все окна круглыми и прозрачными!», то можно просто сказать, что это нелепое предложение. Но часто лучше сначала спросить: «А почему?». Часто существует настоящий и убедительный довод, почему этот человек хочет круглые прозрачные окна. Например, ведутся переговоры с новым крупным клиентом, у которого комиссия по стандартизации требует эти самые круглые прозрачные окна.

Обычно, ознакомившись с контекстом просьбы, обнаруживаешь, что открываются новые возможности. Зачастую просьба может быть выполнена в рамках существующего продукта каким-то другим способом, что позволяет ответить «да», нисколько не напрягаясь: «Собственно говоря, вы можете закачать в настройках скин с круглыми прозрачными окнами и активизировать его».

Иногда у людей появляются идеи, которые кажутся не совместимыми с вашим видением продукта. Я обнаружил, что в этом случае обычно полезно обратиться с вопросом «Почему?» к самому себе. Порой, достаточно огласить причину, чтобы понять ошибочность первой реакции. Если это не так, то можно облегчить ситуацию, включив в обсуждение других ответственных лиц. Помните, что цель все этого сказать «да» другому человеку и попытаться сделать так, чтобы все получилось, и не только для него, но и для себя и всей своей команды.

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

Начинать с «да» – значит работать вместе со своими коллегами, а не против них. Всё хорошо, приятно находить в главах истины до которых сам когда-то дошёл :-).
1   2   3   4   5   6   7   8

Похожие:

Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Разработать обучающую программу, выдающую структурированную и наглядную информацию о работе клавиатуры, буфера клавиатуры, обработчиков...
Не трогайте мышь и отойдите от клавиатуры iconЛитература: Детские народные подвижные игры: Кн для воспитателей...
Игру начинает первая пара: кот ловит мышь, а та бегает вокруг играющих. В опасный момент мышь может спрятаться в коридоре, образованном...
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
СанПиН 4 178-02). В 2009-2010 учебном году кабинет был оснащен 10 новыми ученическими компьютерами (монитор, системный блок, мышь,...
Не трогайте мышь и отойдите от клавиатуры iconКурсовой проект по дисциплине «Системы программирования и операционные системы»
Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика
Не трогайте мышь и отойдите от клавиатуры iconИстория
Системные требования: Pentium 90,Win 95/NT, 16 Мб озу, монитор с разрешением 640х480, HiColor (не менее 32 тыс цветов), 4х cd-rom,...
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель урока: освоение клавиатуры — важнейшего устройства ввода информации в память компьютера
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
С помощью чего проще набрать текст? Двухкнопочной мыши или 102 клавишной клавиатуры?
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Цель: познакомить учащихся с различными устройствами ввода информации в компьютер. Изучить назначения клавиш клавиатуры
Не трогайте мышь и отойдите от клавиатуры iconКомпьютер (арм учителя: монитор+системный блок+клавиатура+мышь)
Начальный курс географии 7 кл. География. Наш дом Земля. Материки, океаны, народы и страны
Не трогайте мышь и отойдите от клавиатуры iconМузыка
Подробная информация о более чем 100 музыкальных инструментов. История возникновения инструментов, возможность прослушать каждый...
Не трогайте мышь и отойдите от клавиатуры iconЛандер Кени «О чем думает Стив»»
Гений цифровой эры, придумавший компьютерную мышь, айфон и многое другое, без чего наша жизнь была бы совсем другой
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
«Свидетель» уже знала о том, что владеет великим сценарием и хотела присвоить ему звание Лучшего Оригинального Сценария еще до того...
Не трогайте мышь и отойдите от клавиатуры iconВ е д е н и е
Кроме того, к компьютеру могут подключаться принтер для вывода на печать текстовой и графической информации; мышь —устройство, облегчающее...
Не трогайте мышь и отойдите от клавиатуры iconКонспект занятия кружка «Компьютерный мир» 1 кл по теме «Манипулятор «мышь»
Построение парами. Переход на площадку. Построение в шеренгу. В центре площадки ребята образуют круг и делятся на две команды
Не трогайте мышь и отойдите от клавиатуры iconПрограмма по формированию навыков безопасного поведения на дорогах...
Продолжение темы Norton Utilities Программа Speed Disk. Программа WipeInfo и другие утилиты. Создание системной дискеты. Драйверы...
Не трогайте мышь и отойдите от клавиатуры iconТема урока: «Компьютер и его основные устройства». Тип урока
Опорные понятия: Периферийные устройства: системный блок, монитор, принтер, сканер, клавиатура, мышь, аудио система


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск