моделирование на основе ответственности в сравнении с причинами изменения класса

StackOverflow https://stackoverflow.com/questions/1600141

  •  05-07-2019
  •  | 
  •  

Вопрос

В этом тексте, который я прочитал

  

Будьте внимательны к компоненту, который просто   прославленная ответственность.   компонент должен захватывать   абстракция, которая имеет цель в   система. Может случиться так, что   появляется в один момент как значимый   компонент действительно только один   ответственность остается сама по себе. Тот   ответственность может быть возложена на   компонент.

Это меня смущает. Если у класса должна быть только одна причина для изменения, кажется, что он должен иметь одну ответственность. Но теперь, кажется, я принимаю это слишком узко. Может ли как-то дать объяснение ответственности и причины изменения в контексте моделирования ответственности? Может ли класс иметь более двух обязанностей и при этом иметь одну причину для изменения (или наоборот)?

Это было полезно?

Решение

Читать о моделировании (или дизайне) класса-ответственности-сотрудничества

http://www.agilemodeling.com/artifacts/crcModel.htm

http://alistair.cockburn.us/Using+CRC+cards

http: //users.csc.calpoly. Edu / ~ jdalbey / SWE / CaseStudies / ATMSim / CRCmodel.html

http://c2.com/doc/oopsla89/paper.html

У класса может быть несколько обязанностей. Он всегда представляет одну «вещь».

" одна из причин изменить " Правило не распространяется на обязанности. Период.

" одна из причин изменить " Правило следует использовать следующим образом.

<Ол>
  • Это не значит "1". Это означает «как можно меньше».

  • Это относится к " интерфейсу " или "лежащая в основе абстракция"; или «концепция» для класса. Класс должен содержать несколько понятий. Когда основная концепция меняется, класс меняется.

  • Многие простые вещи лучше, чем несколько сложных. Проще рекомбинировать и модифицировать простые вещи.

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

  • Трудно определить "простой", но "один концепт" закрыто. «Одна вещь, которую нужно изменить» также является полезным тестом для «простоты».

  • Наконец, "одна причина для изменения" буквально не означает «1».

  • Другие советы

    Как я понимаю, опасность "прославлять ответственность перед компонентом" означает, что вы должны быть осторожны, чтобы не переводить обязанности непосредственно на компоненты системы.

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

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

    Но значит ли это, что должны быть два компонента " инициировать новое письмо " и " ответить на электронную почту " в системе? Нет. Обычный "составить письмо" Компонент сможет обрабатывать оба требования.

    Таким образом, в этом случае компонент " составить письмо " отвечает за цели пользователя "инициировать новую почту" и " ответить на почту " ;. Но его нужно будет изменить, только если изменится его основная концепция (" составление писем ").

    Еще раз внимательно посмотрите на следующую фразу Кокберна: "Компонент должен захватывать абстракцию, которая имеет цель в системе". Цель в системе (причина изменения) не совпадает с целью достижения цели (ответственности) пользователя.

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top