Pattern Language

ChristopherAlexander는 유기적 시스템을 구성하는 방식으로, 전체의 설계도를 가지고 진행하는 것이 아니라, 여러 작은 패턴들의 유기적 관계를 가지고 생성적으로 진화해나가는 방식을 제안하였다. 패턴들이 서로 가지는 유기적 관계는, A패턴은 B패턴과 함께 사용할 수 없다던지, B패턴에는 C나 D 패턴을 함께 사용할 수 있다던지처럼, 일종의 언어가 가지는 제약과 유사한 측면이 있다. 또한 단어들이 모여 글을 이루는 측면도 유사하여 이러한 패턴들의 연관 관계 체계를 PatternLanguage라고 한다.

KentBeck은 학생때 도서관에서 ChristopherAlexander책/TheTimelessWayOfBuilding책/APatternLanguage를 발견하고 깊은 영향을 받는다.

다음은 PatternLanguage에 영향을 받은 분야들이다

패턴을 만들때 특별히 중요시 해야 되는 것을 Context라고 강조해주셨습니다.  많은 분들이 Solution에만 초점을 맞추는 결과 위주의 학습 을 하고 있습니다. 패턴의 결과로 나온 A라는 객체/클래스를 보고 이게 Proxy인가? 이게 Decorator인지 고민하는 것은 보다는.  Context에 좀더 집중해야 된다는 것입니다. 예를 들어 Target User, 제약 사항들, 선행 조건 들과 같은 부분을 신경써서 기술하게 되면, 결국 요구사항들을 세밀하게  기술하게 됩니다.  패턴을 학습하는 사람에게는 좀더 언제 패턴을 사용해야 될지 명확한 가이드라인을 제공하게 되면, 패턴 저자에게는 Problem과 Solution을 좀더 쉽게 쓸수 있다는 것입니다.    여러분이 지금 패턴을 공부하신다면 Context와 Problem을 주의 깊게 보도록 권해드립니다. - http://arload.wordpress.com/2009/08/28/plop-bootcamp/

Pattern Template

http://arload.wordpress.com/2009/09/03/plop-pattern-template/

기존 Pattern Template에 달리 추가된 내용이 Resulting Context/Side Effects 입니다. 지금까지 패턴들은 장점만 너무 기술한 경향이 있는데. 이제 이 패턴을 적용할 경우 발생하는 Side-Effect도 기술하길 권하고 있습니다.

Name
보통 패턴이 무엇을 “구축(build)” 하는지 설명하는 명사 구를 사용하고, 주의 깊게 선택해야 한다.
Aliases
그리고 별칭들도 같이 넣어서 시작하는 것이 좋다.
Context
문제에 대한 설정을 설명해라. 타겟 사용자와 어떤 패턴들이 이미 적용되었는지를 설명해라. 그리고 고정된 제약 사항들, 선행 조건, 이미 적용된 패턴과 무엇이 다르고 같은지 설명해라.
Forces
왜 이 문제가 중요한지. 왜 누구나 아는 해결책들로는 충분하지 않은지. 당신이 제안하는 몇가지 제어 방법들에 전반적으로 깔려 있는 제약사항들을 기술해야 한다.
Problem
이 상황에서 무엇이 잘못되었는지, 이 문제들이 커져서 context에 어떤 나쁜 영향을 미치는지 기술해야 한다.
Solution
사용자가 솔루션을 구현할수 있게 충분히 자세하게 설명해야 한다. 하지만 솔루션을 세부적인 사항만을 다루는 너무 협소한 목록형태로 패턴을 기술해서는 안된다.
Resulting Context / Consequences / Side-effects
솔루션을 적용할 때 발생할는 장점과 새롭게 발생하는 문제들을 기술해라. 그리고 새로 발생하는 문제들을 해결하는 패턴들을 설명해라.
Rationale (이론적 해석)
솔루션이 작동되는 이유(이론적 해석)를 설명해라. 사용자의 편의를 고려해라. 즉 스토리 텔링 기법을 사용해라. 당신의 전문적인 지식을 공유해라. 외부에 있는 참고 자료들을 가져와라.
Known Use
어디서 이 패턴들이 사용되는지 언급하거나, 간단히 목록화해라.
Realted Pattern / See also
연관되어 있는 패턴의 이름과, 패턴과의 연관성을 간단히 설명해라.
Sketch
만약 적용할수 있다면 약식으로도 표현해라.
Author / Orginator
References
이 패턴에서 언급하고 있는 어떤 것이든 기술해라.
Example
Code 또는 Pseudo Code등을 사용해라.

Ward와 Mehaffy는 Wiki as Pattern Language이라는 글을 발표한다.

거기에, Erich Gamma가 이렇게 말했다고 나온다.

As described by Erich Gamma, a pioneer of pattern languages in programming, “This approach to patterns differs from [Alexandrian] pattern languages: Rather than coming up with a set of interwoven patterns top-down, micro-architectures are more independent patterns that eventually relate to each other bottom-up. A pattern language guides you through the whole design, whereas we have these little pieces, bites of engineering knowledge. I confess that this is less ambitious, but still very important and useful...” (Gamma, 2005)


CategoryPattern