Skip to content

Commit 3f42835

Browse files
authored
Merge pull request #390 from LLM-Coding/copilot/add-crc-cards-anchor
Add CRC-Cards semantic anchor
2 parents ac1afad + 4038178 commit 3f42835

3 files changed

Lines changed: 99 additions & 10 deletions

File tree

docs/anchors/crc-cards.adoc

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
= CRC-Cards
2+
:categories: design-principles
3+
:roles: software-developer, software-architect, educator, consultant
4+
:related: grasp, gof-design-patterns, domain-driven-design
5+
:proponents: Ward Cunningham, Kent Beck
6+
:tags: crc-cards, oop, object-oriented-design, brainstorming, collaborative-design, class-responsibility-collaboration
7+
:tier: 3
8+
9+
[%collapsible]
10+
====
11+
Full Name:: Class-Responsibility-Collaboration Cards
12+
13+
Also known as:: CRC Cards, CRC Card Method, Class-Responsibility-Collaborator Cards
14+
15+
[discrete]
16+
== *Core Concepts*:
17+
18+
Class:: The name of the class or object being modeled — one index card per class
19+
20+
Responsibilities:: What the class knows (data it holds) and what it does (behavior it provides) — listed on the left side of the card
21+
22+
Collaborators:: Other classes this class depends on to fulfill its responsibilities — listed on the right side of the card
23+
24+
Index cards as design medium:: Deliberately low-tech: physical cards keep design discussions lightweight, encourage discarding and rethinking, and prevent over-engineering
25+
26+
Role-playing scenarios:: Team members physically hold cards and walk through scenarios, simulating message passing between objects to validate design
27+
28+
Collaborative brainstorming:: Encourages cross-functional participation; everyone can contribute without needing deep technical background
29+
30+
Finding classes:: Start with nouns in the problem description; candidate classes are discovered, not prescribed
31+
32+
Iterative refinement:: Cards are cheap to discard — designs are evolved through multiple rounds of role-playing and critique
33+
34+
35+
Key Proponents:: Ward Cunningham, Kent Beck ("A Laboratory For Teaching Object-Oriented Thinking", OOPSLA 1989)
36+
37+
[discrete]
38+
== *When to Use*:
39+
40+
* Early OO design phases — discovering classes, responsibilities, and relationships before writing code
41+
* Collaborative design sessions where multiple stakeholders or developers shape the domain model
42+
* Teaching object-oriented thinking by making abstract concepts tangible and interactive
43+
* Validating design with LLMs by describing cards and role-playing request flows
44+
* Lightweight architecture exploration before committing to a UML tool or full model
45+
46+
[discrete]
47+
== *Related Anchors*:
48+
49+
* <<grasp,GRASP>> - Patterns for assigning responsibilities to classes in OO design
50+
* <<gof-design-patterns,GoF Design Patterns>> - Design patterns that can emerge from CRC-Card sessions
51+
* <<domain-driven-design,Domain-Driven Design>> - CRC Cards support ubiquitous language and entity discovery
52+
====

skill/semantic-anchor-translator/references/catalog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,11 @@ Source: https://github.com/LLM-Coding/Semantic-Anchors
141141
- **Proponents:** Craig Larman
142142
- **Core:** 9 patterns for OO responsibility assignment — Information Expert, Creator, Controller, Low Coupling, High Cohesion, Polymorphism, Pure Fabrication, Indirection, Protected Variations
143143

144+
### CRC-Cards
145+
- **Also known as:** CRC Cards, Class-Responsibility-Collaboration Cards
146+
- **Proponents:** Ward Cunningham, Kent Beck
147+
- **Core:** Index cards for collaborative OO design — each card has Class name, Responsibilities (what it knows/does), and Collaborators (other classes it depends on); role-playing scenarios validate design; deliberately low-tech to encourage iterative thinking
148+
144149
### DRY (Don't Repeat Yourself)
145150
- **Core:** Every piece of knowledge has single, unambiguous representation
146151

website/public/data/anchors.json

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,38 @@
261261
"filePath": "docs/anchors/cqrs.adoc",
262262
"tier": 3
263263
},
264+
{
265+
"id": "crc-cards",
266+
"title": "CRC-Cards",
267+
"categories": [
268+
"design-principles"
269+
],
270+
"roles": [
271+
"software-developer",
272+
"software-architect",
273+
"educator",
274+
"consultant"
275+
],
276+
"related": [
277+
"grasp",
278+
"gof-design-patterns",
279+
"domain-driven-design"
280+
],
281+
"proponents": [
282+
"Ward Cunningham",
283+
"Kent Beck"
284+
],
285+
"tags": [
286+
"crc-cards",
287+
"oop",
288+
"object-oriented-design",
289+
"brainstorming",
290+
"collaborative-design",
291+
"class-responsibility-collaboration"
292+
],
293+
"filePath": "docs/anchors/crc-cards.adoc",
294+
"tier": 3
295+
},
264296
{
265297
"id": "cynefin-framework",
266298
"title": "Cynefin Framework",
@@ -325,7 +357,7 @@
325357
},
326358
{
327359
"id": "devils-advocate",
328-
"title": "Devil’s Advocate",
360+
"title": "Devil\u2019s Advocate",
329361
"categories": [
330362
"problem-solving"
331363
],
@@ -343,7 +375,7 @@
343375
},
344376
{
345377
"id": "diataxis-framework",
346-
"title": "Diátaxis Framework",
378+
"title": "Di\u00e1taxis Framework",
347379
"categories": [
348380
"documentation"
349381
],
@@ -359,7 +391,7 @@
359391
},
360392
{
361393
"id": "docs-as-code",
362-
"title": "Docs-as-Code according to Ralf D. Müller",
394+
"title": "Docs-as-Code according to Ralf D. M\u00fcller",
363395
"categories": [
364396
"documentation"
365397
],
@@ -627,7 +659,7 @@
627659
"tdd-london-school"
628660
],
629661
"proponents": [
630-
"Aslak Hellesøy"
662+
"Aslak Helles\u00f8y"
631663
],
632664
"tags": [
633665
"gherkin",
@@ -1435,9 +1467,9 @@
14351467
"morphological-box"
14361468
],
14371469
"proponents": [
1438-
"Jörg Becker",
1470+
"J\u00f6rg Becker",
14391471
"Michael Rosemann",
1440-
"Rolf Schütte"
1472+
"Rolf Sch\u00fctte"
14411473
],
14421474
"tags": [
14431475
"modeling",
@@ -1483,7 +1515,7 @@
14831515
},
14841516
{
14851517
"id": "gtd",
1486-
"title": "GTD Getting Things Done",
1518+
"title": "GTD \u2014 Getting Things Done",
14871519
"categories": [
14881520
"knowledge-management"
14891521
],
@@ -1795,7 +1827,7 @@
17951827
},
17961828
{
17971829
"id": "lasr",
1798-
"title": "LASR according to Toth/Zörner",
1830+
"title": "LASR according to Toth/Z\u00f6rner",
17991831
"categories": [
18001832
"software-architecture"
18011833
],
@@ -1813,7 +1845,7 @@
18131845
],
18141846
"proponents": [
18151847
"Stefan Toth",
1816-
"Stefan Zörner"
1848+
"Stefan Z\u00f6rner"
18171849
],
18181850
"tags": [
18191851
"architecture-documentation",
@@ -3174,7 +3206,7 @@
31743206
},
31753207
{
31763208
"id": "yagni",
3177-
"title": "YAGNI (You Aren’t Gonna Need It)",
3209+
"title": "YAGNI (You Aren\u2019t Gonna Need It)",
31783210
"categories": [
31793211
"design-principles"
31803212
],

0 commit comments

Comments
 (0)