Как разработать дизайн с использованием карт CRC? - PullRequest
29 голосов
/ 19 сентября 2008

Мне всегда было интересно, как люди используют карты CRC (совместная ответственность класса). Я читал о них в книгах, нашел расплывчатую информацию в Интернете, но никогда не понимал ее. Я думаю, что кто-то должен сделать видео на YouTube, показывающее сеанс с картами CRC, поскольку в одной из моих книг это было очень сложно сформулировать в тексте, что его «должен научить кто-то, кто уже освоил его». К сожалению, я не знаю здесь никого, кто бы использовал карты CRC, и я хотел бы узнать больше.

UPDATE

Буду признателен за любые ссылки на видео, показывающие людей, работающих с этой техникой.

Ответы [ 6 ]

33 голосов
/ 27 февраля 2009

Трудно обобщить в SO ответе, но я попробую. Одной из задач проектирования объектов является уравновешивание мышления с общей точки зрения и мышления с точки зрения отдельного объекта. Вам нужна общая перспектива, чтобы завершить вычисления, но вам нужна перспектива отдельного объекта, чтобы эффективно разделить логику и данные.

Поддержание этого баланса - это то место, куда приходят карты CRC. Когда они сидят на столе, вы можете посмотреть на вычисления в целом. Однако, когда вы берете одну карту, вам физически, кинестетически предлагается взглянуть на точку зрения этого единственного объекта - у меня есть этот маленький кусочек этого вычисления для ограниченных ресурсов, как я собираюсь его выполнить?

Со временем способность одновременно удерживать обе перспективы просачивается в мозг. Меньше и меньше пишется на карточках. Тогда карты пустые. Через некоторое время люди просто указывают на то, где будет находиться карта, если они потрудятся забрать пустую карточку из стека. В конце концов, люди обладают преимуществами стиля мышления, не нуждаясь в карточках вообще. Однако, когда вы разговариваете с кем-то, кто не освоил баланс, вытащить карты с реалами может быть полезным помощником в общении.

Самая большая слабость, которую я нахожу с карточками, - это отсутствие обратной связи. Вы можете обмануть себя тем, как этот код получится. Я бы предложил использовать карты только до тех пор, пока не возникнет интересный вопрос, обратитесь к тестам / коду для подтверждения и затем возобновите разработку.

Мы с Уордом сняли 15 лет назад видео о сеансе дизайна, но я нигде не нахожу его в Интернете и у меня нет его копии. Я не уверен, что это будет полезно в качестве учебного пособия в любом случае. Я не знаю других видео, но они могут быть интересными, особенно если сравнивать несколько стилей разных дизайнеров.

13 голосов
/ 27 февраля 2009

Я постараюсь дать ответ. Таким образом, карты CRC обычно используются для моделирования в объектно-ориентированной среде, чтобы лучше понять систему, которая должна быть разработана (но я думаю, вы уже знаете). Карты CRC приходят в самом конце, когда вы прибываете непосредственно перед фактической реализацией. Различные шаги для достижения этого уровня могут быть следующими:

  1. Отправной точкой является выявление требований. Здесь предлагается вовлекать клиента на ранней и постоянной основе (взгляните на гибкие подходы, т. Е. Экстремальное программирование)
  2. Требования могут быть смоделированы либо с помощью диаграмм вариантов использования (UML), либо с помощью пользовательских историй (подход к гибкому экстремальному программированию). Ключевая проблема здесь состоит в том, чтобы найти правильные вовлеченные объекты. Конечно, это очень сильно зависит от домена, в котором вы находитесь. Если вы идете «трудным» путем, вы можете применять такие методы, как «извлечение существительного». Таким образом, вы анализируете документ спецификации и извлекаете все существительные (включая составные имена и имена с прилагательными). Проанализируйте их все и отбросьте ненужные.
  3. Как только у вас появятся правильные существительные -> объекты, вы можете начать создавать свои карты CRC. Так что же делается на сессии CRC? Основная задача состоит в том, чтобы найти и назначить обязанности ваших (ранее) найденных объектов, которые затем наносятся на небольшие учетные карточки (наши карты CRC). «Обязанности» - это, в основном, основные функции конкретного объекта, а «совместная работа» - это другие необходимые объекты для выполнения определенных функций (это зависимости между различными объектами в вашей модели). Важным моментом при распределении обязанностей является то, что обязанности хорошо распределены по всей системе каким-то сбалансированным образом. Еще один очень важный момент - избегать дублирования обязанностей между объектами (именно здесь помогают карты CRC).
    Сессия CRC должна начинаться с мозгового штурма, с активным обсуждением среди разработчиков, и его следует выполнять. непосредственно на фактические учетные карточки.

Надеюсь, я смог вам чем-то помочь.

С уважением,
Juri

7 голосов
/ 28 февраля 2009

Я думаю, что ваше утверждение "Я не знаю здесь никого, кто бы использовал карты CRC" в значительной степени подводит итог состояния карт CRC в процессе разработки. Карты CRC, на мой взгляд, были шагом на пути от традиционной разработки, основанной на планах, к гибкой разработке. Мир двигался дальше. Вместо того чтобы сосредоточиться на том, как использовать карты CRC, я бы исследовал такие методы, как TDD , которые могут использовать такие методы, как карты UML и CRC, в качестве промежуточных артефактов, но которые концентрируются на коде, и в частности на тестах. Это направление, которое выбрали изобретатели карт CRC, и я бы порекомендовал вам также.

7 голосов
/ 19 сентября 2008

перейти к источнику - Кент Бек, Уорд Каннингем, когда-нибудь слышали о них?

5 голосов
/ 19 сентября 2008

Самый простой способ использовать их, на мой взгляд, без проблем - записать небольшие CRC-карты в заголовки ваших файлов следующим образом:

///////////////////////
//* CRC CARD
//*  Class: UISliderEvent
//*  Responsability: Event that holds the value and id of a Slider's movement
//*  Collaborators: UISlider, UIEvent
//////////////////////

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

3 голосов
/ 13 октября 2009

В своей книге Объектный дизайн: роли, обязанности и сотрудничество , опубликованной в 2003 году Ребекка Уирфс-Брок и Алан МакКин обсуждают карты CRC в некоторых деталях. Они действительно подчеркивают разницу, которую это имеет для всей процедуры, в том, что это должно быть очень тактильным опытом, и это ослабляет мысли людей о том, чтобы обойти физический объект при попытке конкретизировать дизайн / требование.

Подзаголовок этой главы предполагает, что использование карт является частью фазы «исследовательского проектирования», поэтому, вероятно, это происходит до того, как вы начнете много писать, но я не вижу причин, по которым вы бы не стали возвращаться к ним в каждая итерация гибкого проекта и напоминание себе о том, куда, как вы думали, вы идете, и проверка, если это необходимо (как группа, конечно).

Кажется, я помню, что они даже предлагают разносить мяч по комнате, чтобы говорить мог только тот, у кого мяч, так что, возможно, речь идет не столько о картах CRC, сколько о том, что все в комнате говорят о ролях. и ответственность объектов, которые имеют значение?

Если вы хотите прочитать пример использования карт CRC в действии (в дополнение к оригинальной статье Кента и Уорда, конечно), взгляните на Книга карт CRC .

...