Принцип одной ответственности ( SRP ) представляет собой компьютер-программирование принципа гласит , что каждый модуль , класс или функцию в компьютерной программе , должен нести ответственность за одной частью этой программы функциональности , и он должен инкапсулировать эту часть. Все , что модуль, класс или функция по услугам должно быть узко совмещено с этой ответственностью. [1]
Роберт К. Мартин , создатель термина, выражает принцип следующим образом: «У класса должна быть только одна причина для изменения» [1], хотя из-за путаницы вокруг слова «причина» он также заявил: «Этот принцип касается люди.". [2] В некоторых своих выступлениях он также утверждает, что принцип касается, в частности, ролей или актеров. Например, хотя это может быть один и тот же человек, роль бухгалтера отличается от роли администратора базы данных. Следовательно, каждый модуль должен отвечать за каждую роль. [3]
История
Термин был введен Роберт С. Мартин в статье с тем же именем , как часть его принципов объектно - ориентированного дизайна , [4] стала популярной благодаря своей книге Agile разработки программного обеспечения, принципы, шаблоны и практики . [5] Мартин описал его как основанный на принципе единства , как описано Том Демарко в своей книге Structured Analysis и Спецификация системы , [6] и Мейлер Пейдж Джонс в Практическое руководство по Structured Systems Design . [7] В 2014 году Мартин написал в блоге сообщение под названием «Принцип единой ответственности» с целью разъяснить, что подразумевается под фразой «причина изменений».
Пример
Мартин определяет ответственность как причину для изменения и заключает, что у класса или модуля должна быть одна и только одна причина для изменения (например, переписывания).
В качестве примера рассмотрим модуль, который составляет и распечатывает отчет. Представьте, что такой модуль можно изменить по двум причинам. Во-первых, может измениться содержание отчета. Во-вторых, может измениться формат отчета. Эти две вещи меняются по разным причинам. Принцип единственной ответственности гласит, что эти два аспекта проблемы на самом деле являются двумя отдельными обязанностями и, следовательно, должны находиться в разных классах или модулях. Было бы плохим сочетанием двух вещей, которые меняются по разным причинам в разное время.
Причина, по которой важно сосредоточить класс на одной задаче, заключается в том, что это делает класс более надежным. Продолжая предыдущий пример, если есть изменение в процессе компиляции отчета, существует большая опасность того, что код печати сломается, если он является частью того же класса.
Смотрите также
- Разделение проблем
- Схема цепочки ответственности
- Сплоченность (информатика)
- Принцип открытия / закрытия
- SOLID - буква "S" в "SOLID" означает принцип единственной ответственности.
- GRASP (объектно-ориентированный дизайн)
Рекомендации
- ^ а б Мартин, Роберт С. (2003). Гибкая разработка программного обеспечения, принципы, шаблоны и практики . Прентис Холл. п. 95. ISBN 978-0135974445. CS1 maint: обескураженный параметр ( ссылка )
- ^ Мартин, Роберт С. (2014). «Принцип единой ответственности» . Блог чистого кода .
- ^ Роберт С. Мартин (2018). Чистая архитектура: Руководство по структуре и дизайну программного обеспечения . Прентис Холл. ISBN 978-0-13-449416-6.
- ^ Мартин, Роберт С. (2005). «Принципы OOD» . butunclebob.com .
- Перейти ↑ Martin 2003 , pp. 95-98
- ^ Демарко, Том. (1979). Структурированный анализ и спецификация системы . Прентис Холл . ISBN 0-13-854380-1. CS1 maint: обескураженный параметр ( ссылка )
- ^ Пейдж-Джонс, Мейлир (1988). Практическое руководство по проектированию структурированных систем . Серия Yourdon Press Computing . п. 82. ISBN 978-8120314825. CS1 maint: обескураженный параметр ( ссылка )
Внешние ссылки
- Секрет принципа единой ответственности
- Принцип единой ответственности