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