E D R , A S I H C RSS

Design Patterns AsAPath To Conceptual Integrity


Design Patterns as a Path to Conceptual Integrity
κ°œλ…μ  μ™„μ „μ„±μ˜ κ²½λ‘œλ‘œμ„œμ˜ λ””μžμΈ νŒ¨ν„΄λ“€

24 June, 2001
Stan Feighny

During our discussions about the organization of design patterns there was a comment about the difficulty of identifying the β€œgenerative nature” of design patterns. This may be a good property to identify, for if we understood how design patterns are used in the design process, then their organization may not be far behind. Alexander makes a point that the generative nature of design patterns is one of the key benefits. In practice, on the software side, the generative nature seems to have fallen away and the more common approach for using design patterns is characterized as β€œwhen faced with problem xyz…the solution is…” One might say in software a more opportunistic application of design patterns is prevalent over a generative use of design patterns.

λ””μžμΈνŒ¨ν„΄μ˜ 쑰직에 λŒ€ν•œ 우리의 토둠쀑 λ””μžμΈ νŒ¨ν„΄μ˜ 'μžμ—°μ μΈ 생성' 을 μ •μ˜ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 의견이 μžˆμ—ˆλ‹€.만일 μš°λ¦¬κ°€ μ–΄λ–»κ²Œ λ””μžμΈ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ””μžμΈ νŒ¨ν„΄λ“€μ΄ μ΄μš©λ˜λŠ”μ§€ μ΄ν•΄ν•œλ‹€λ©΄, 그리고 νŒ¨ν„΄λ“€μ˜ 쑰직화가 멀리 μˆ¨μ–΄μžˆμ§€ μ•Šλ‹€λ©΄, μ΄λŠ” μ •μ˜λΌ μœ„ν•œ 쒋은 ν”„λ‘œνΌν‹°κ°€ 될 것이닀. ν¬λ¦¬μŠ€ν† νΌ μ•Œλ ‰μ‚°λ”(Alexander) λŠ” λ””μžμΈ νŒ¨ν„΄μ˜ μžμ—°μ  생성은 이득이 λ˜λŠ” μš”μ†Œμ€‘ ν•˜λ‚˜μž„μ„ κ°•μ‘°ν–ˆλ‹€. μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ΄€μ μ˜ 업무 λ‚΄μ—μ„œ μžμ—°μ μΈ 생성은 μ‹€νŒ¨ν•œκ²ƒ 처럼 보이며, λ””μžμΈ νŒ¨ν„΄μ„ μ΄μš©ν•˜λŠ” 더 일반적인 μ ‘κ·Ό 방법은 λ‹€μŒκ³Ό 같은 μ‹μœΌλ‘œ λ¬˜μ‚¬λœλ‹€. "xyz λ¬Έμ œμ— λŒ€ν•΄ μ§λ©΄ν•˜κ²Œ λ˜μ—ˆμ„λ•Œ.. 해결책은.." ν˜ΉμžλŠ” μ†Œν”„νŠΈμ›¨μ–΄κ³„μ—μ„œ 더 λ””μžμΈνŒ¨ν„΄μ˜ 편의주의적인 μ μš©μ€ λ””μžμΈνŒ¨ν„΄μ˜ 생성적인 μ΄μš©λ³΄λ‹€ μœ μš©ν•˜λ‹€κ³  말할지도 λͺ¨λ₯Έλ‹€.

The source of this difference may be the lack of focus on design patterns in the design process. In fact, we seldom see discussions of the design process associated with design patterns. It is as though design patterns are a tool that is used independent of the process. Let’s investigate this further:

μ΄λŸ¬ν•œ 차이의 근본은 λ””μžμΈ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œμ˜ λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•œ μ΄›μ μ˜ λΆ€μ±μΌμ§€λ„ λͺ¨λ₯Έλ‹€. 사싀상, μš°λ¦¬λŠ” λ””μžμΈ νŒ¨ν„΄κ³Ό κ΄€λ ¨λœ λ””μžμΈ ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 토둠을 거의 보지 λͺ»ν–ˆλ‹€. λ””μžμΈνŒ¨ν„΄μ„ ν”„λ‘œμ„ΈμŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μ“°μ΄λŠ” λ„κ΅¬μ²˜λŸΌ 보기도 ν•œλ‹€. 이에 λŒ€ν•΄ μ€ λ” μ—°κ΅¬ν•΄λ³΄μž.

A comment from Carriere and Kazman at SEI is interesting: β€œWhat Makes a Good Object Oriented Design?”
Β· The existence of an architecture, on top of any object/class design
Β· The internal regularity (….or conceptual integrity) of the architectural design

SEI μ—μ„œμ˜ Carriere 와 Kazman 의 μ½”λ©˜νŠΈλŠ” ν₯λΈλ‘­λ‹€. "무엇이 쒋은 객체지ν–₯ λ””μžμΈμ„ λ§Œλ“œλŠ”κ°€?"
였브젝트/클래슀 λ””μžμΈ μœ„μ— μ•„ν‚€ν…μ³μ˜ 쑴재
아킀텍쳐 λ””μžμΈμ˜ 내뢀적 μ •κ·œμ„±(λ˜λŠ” ConceptualIntegrity)

This is what Brooks wrote 25 years ago. "… Conceptual integrity is the most important consideration in system design."Brooks 86 He continues: β€œThe dilemma is a cruel one. For efficiency and conceptual integrity, one prefers a few good minds doing design and construction. Yet for large systems one wants a way to bring considerable manpower to bear, so that the product can make a timely appearance. How can these two needs be reconciled?”

μ΄λŠ” Brooks κ°€ 25λ…„ 전에 μ“΄ 말이닀. "ConceptualIntegrity λŠ” μ‹œμŠ€ν…œ λ””μžμΈμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 일이닀." κ·ΈλŠ” 계속 λ§ν•œλ‹€. "이 λ”œλ ˆλ§ˆλŠ” μž”μΈν•œ 것이닀. νš¨μœ¨μ„±κ³Ό κ°œλ…μ  완전성쀑 ν˜ΉμžλŠ” λ””μžμΈκ³Ό ꡬ좕을 ν•˜λŠ” 것을 μ„ ν˜Έν•  것이닀. 큰 μ‹œμŠ€ν…œμ— λŒ€ν•΄ ν˜ΉμžλŠ” μ±…μž„μ„ 맑을 μ€‘μš”ν•œ 맨 νŒŒμ›ŒλΌ κ°€μ Έμ˜¬ 방법을 원할 것이닀. κ·Έλž˜μ„œ ν”„λ‘œλ•νŠΈλŠ” μ μ‹œμ— μΆœν˜„ν•  것이닀. μ–΄λ–»κ²Œ 이 두 ν•„μš”μš”μ†Œλ“€μ΄ μ‘°ν™”λΌ μ΄λ£° 거인가?

One approach would be to identify and elevate a single overriding quality (such as adaptability or isolation of change) and use that quality as a foundation for the design process. If this overriding quality were one of the goals or even a specific design criteria of the process then perhaps the β€œmany” could produce a timely product with the same conceptual integrity as β€œa few good minds.” How can this be accomplished and the and at least parts of the β€œcruel dilemma” resolved?

ν•˜λ‚˜μ˜ μ–΄ν”„λ‘œμΉ˜λŠ” μ •μ˜, κ°€μž₯ μ΅œμš°μ„ μ˜ μ€‘μš”ν•œ νŠΉμ§ˆμ„ μƒμŠΉμ‹œν‚¨λ‹€. (μ–΄λŽν„°λΉŒλ¦¬ν‹°λ‚˜ 변화에 λŒ€ν•œ 뢄리) 그리고 이 퀄리티듀듀을 λ””μžμΈ ν”„λ‘œμ„ΈμŠ€μ˜ μ„λ¦½μ˜ μš©λ„λ‘œ μ΄μš©ν•  수 μžˆλ‹€. 만일 이 μ΅œμš°μ„ μ˜ νŠΉμ§•μ΄ ν”„λ‘œμ„ΈμŠ€μ˜ λͺ©μ μ΄λ‚˜ ꡬ체적 λ””μžμΈ λΆ„λ₯˜μ˜ ν•˜λ‚˜λΌλ©΄ μ•„λ§ˆ 'many'λŠ” 같은 κ°œλ…μ  완전성을 "μ•½κ°„μ˜ 쒋은 감정"μœΌλ‘œμ„œ μ μ‹œμ— ν”„λ‘œλ•νŠΈλΌ ..
μ–΄λ–»κ²Œ μ΄λΌ λ‹¬μ„±ν•  것이며, 'μž”μΈν•œ λ”œλ ˆλ§ˆ' 의 μΌλΆ€λΌ ν•΄κ²°ν• κ²ƒμΈκ°€?


The following summary is from β€œDesign Patterns as a Litmus Paper to Test the Strength of Object-Oriented Methods” and may provide some insight:
http://www.econ.kuleuven.ac.be/tew/academic/infosys/Members/Snoeck/litmus2.ps

λ‹€μŒμ€ "객체지ν–₯ λ©”μ†Œλ“œλ“€μ˜ νš¨κ³ΌλΌ ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•œ 리트머슀 μ’…μ΄λ‘œμ„œμ˜ λ””μžμΈ νŒ¨ν„΄" μœΌλ‘œλΆ€ν„°μ˜ μš”μ•½μ΄λ©°, 톡찰λ ₯을 μ œκ³΅ν•΄μ„ κ²ƒμ΄λ‹€.

1. Some O-O design methodologies provide a systematic process in the form of axiomatic steps for developing architectures or micro-architectures that are optimality partitioned (modularized) according to a specific design criteria.
λͺ‡λͺ‡ O-O λ””μžμΈ 방법둠듀은 ꡬ체적 λ””μžμΈ κΈ°μ€μ— 따라 졜적으둜 λ‚˜λˆ„μ–΄μ§„(λͺ¨λ“ˆν™”λ˜μ–΄μ§„) μ•„ν‚€ν…μ³λ‚˜ 마이크둜-아킀텍쳐듀을 κ°œλ°œν•˜λŠ” λͺ…ν™•ν•œ λ‹¨κ³„μ˜ νΌμ—μ„œ μ‹œμŠ€ν…œμ μΈ ν”„λ‘œμ„ΈμŠ€λΌ μ œκ³΅ν•œλ‹€.

2. The following methodologies are listed according to their key design criteria for modularization:
λ‹€μŒμ˜ 방법둠듀은 λͺ¨λ“ˆν™”에 λŒ€ν•œ κ·Έλ“€μ˜ ν‚€ λ””μžμΈ κΈ°μ€μ— λ”°λ₯Έ λͺ©λ‘μ΄λ‹€.
a. Booch in OOSE relies heavily on expert designers and experience to provide the system modularization principle.
OOSE 의 Booch λŠ” system modularization principle 을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ „λ¬Έκ°€ λ””μžμ΄λ„ˆμ™€ κ²½ν—˜μ— 맀우 μ˜μ‘΄μ μ΄λ‹€.

b. OMT, Coad-Yourdon, Shaer-Mellor are data driven and as such raise data dependency as the system modularization principle.
OMT, Coad-Yourdon, Shaer-Mellor 의 경우 data driven 이며, system modularization principle λ‘œμ„œ 데이터 μ˜μ‘΄μ„±μ„ λ“€μ—ˆλ‹€.

c. Wirfs-Brock with Responsibility Driven Design (RDD) raises contract minimization as the system modularization principle.
ResponsibilityDrivenDesign 의 Wirfs-BrockλŠ” system modularization 에 λŒ€ν•΄ 계약 μ΅œμ†Œν™”λΌ λ“€μ—ˆλ‹€.

d. Snoeck with Event Driven Design (EDD) raises existence dependency as the system modularization principle.
EventDrivenDesign 의 Snoeck λŠ” system modularization principle 에 λŒ€ν•΄ μ˜μ‘΄μ„± μ‘΄μž¬λΌ λ“€μ—ˆλ‹€.

3. According to the authors only RDD and EDD have axiomatic rules for OO design and therefore are strong OO design methods.
μ €μžμ— μ˜ν•˜λ©΄, 였직 RDD 와 EDD κ°€ OO λ””μžμΈ λŒ€ν•œ λͺ…ν™•ν•œ 룰을 가지고 있으며 그러λ€λ‘œ 이듀은 μ„득λ ₯μžˆλŠ” OO λ””μžμΈ 방법듀이닀.

4. Design patterns provide guidance in designing micro-architectures according to a primary modularization principle: β€œencapsulate the part that changes.”
λ””μžμΈ νŒ¨ν„΄μ€ "λ³€ν™”ν•˜λŠ” 뢀뢄에 λŒ€ν•΄ μΊ‘μŠν™”ν•˜λΌ"λŠ” 1차적인 λͺ¨λ“ˆν™” 원리에 따라 마이크둜-아킀텍쳐듀을 λ””μžμΈν•˜λŠ” κ°€μ΄λ“œλΌ μ œκ³΅ν•œλ‹€.

5. EDD and RDD will generate different design patterns that meet the primary modularization principle β€œencapsulate the part that changes.” in different ways when applied according to their axiomatic rules. For example RDD generates Mediator, Command, Template Method and Chain of responsibility (mostly behavior) where as EDD generates Observer, Composite, and Chain of responsibility (mostly structure).
EDO 와 RDD λŠ” 이 1μ°¨ 원리인 "λ³€ν™”ν•˜λŠ” 뢀뢄에 λŒ€ν•΄ μΊ‘μŠν™”ν•˜λΌ"와 κ·Έλ“€μ˜ λͺ…ν™•ν•œ 룰듀에 따라 μ μš©λ λ•Œ λ‹€λ₯Έ λ°©λ²•λ“€λ‘œ λ§Œλ‚˜μ„œ, λ‹€λ₯Έ λ””μžμΈ νŒ¨ν„΄λ“€μ„ 생성해 λ‚Ό 것이닀. μ˜ˆλΌ λ“€λ©΄, RDDλŠ” Mediator, Command, TemplateMethod, ChainOfResponsibility (주둜 behavior), EDD λŠ” Observer, Composite, ChainOfResposibility(주둜 structure) λΌ μƒμ„±ν•΄λ‚Όκ²ƒμ΄λ‹€.

Now putting this together with the earlier discussion about conceptual integrity we can propose some questions for discussion:

자, 이전 ConceptualIntegrity 에 λŒ€ν•œ ν† λ‘ κ³Ό ν•¨κ»˜ μš°λ¦¬λŠ” 토둠을 μœ„ν•œ μ§ˆλ¬Έλ“€μ„ μ œμ•ˆν•  수 μžˆλ‹€.


Β· Are some O-O design methods better at creating an environment where design patterns are used in a generative sense?
Β· Will strong O-O design methods produce results for the β€œmany” with the same conceptual integrity as β€œa few good minds.”

λͺ‡λͺ‡ O-O λ””μžμΈ λ©”μ†Œλ“œλ“€μ€ λ””μžμΈ νŒ¨ν„΄μ„ μƒμ„±μ˜ κ΄€μ μ—μ„œ μ΄μš©ν•˜λŠ” ν™˜κ²½μ„ λ§Œλ“œλŠ”λ° 더 쒋은가?
μ„득λ ₯μžˆλŠ” O-O λ””μžμΈ λ©”μ†Œλ“œλ“€μ΄ "a few good minds" 처럼 같은 κ°œλ…μ  완전성을 가진 "many" λΌ μ— λŒ€ν•œ 결과물을 λ§Œλ“€μ–΄λ‚Ό 것인가?

Even closer to our topic:
우리의 μ£Όμ œμ™€ 더 κ°€κΉŒμ›Œμ§ˆ 수 μžˆλ‹€.

Β· Does J2EE have a primary modularization principle?
Β· How does it meet this objective?
Β· Does the product have conceptual integrity?
Β· Along what principle (experience, data, existence dependency, contract minimization, or some unknown principle) is the application partitioned?
Β· Does this give insight into the organization of design patterns?
J2EE λŠ” 1차적인 λͺ¨λ“ˆν™” μ›λ¦¬λΌ κ°€μ§€κ³  μžˆλŠ”κ°€?
μ–΄λ–»κ²Œ 이 λͺ©ν‘œμ™€ λ§Œλ‚ κ²ƒμΈκ°€?
μ‚°μΆœλ¬Όμ€ κ°œλ…μ  완전성을 κ°€μ§€λŠ”κ°€?
μ–΄λ–€ 원리에 따라 (κ²½ν—˜, 데이터, μ˜μ‘΄μ„± 쑴재, 계약 μ΅œμ†Œν™”, λ˜λŠ” μ•Œλ €μ§€μ§€ μ•Šμ€ 원리듀) κ°€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λͺ¨λ“ˆν™”ν•˜λŠ”κ°€?
이 μ›λ¦¬λŠ” λ””μžμΈ νŒ¨ν„΄μ˜ 쑰직으둜 톡찰λ ₯을 μ£ΌλŠ”κ°€?

The dilemma is a cruel one. For efficiency and conceptual integrity, one prefers a few good minds doing design and construction. Yet for large systems one wants a way to bring considerable manpower to bear, so that the product can make a timely appearance. How can these two needs be reconciled?
Brooks Mythical Man Month 86

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:07
Processing time 0.0313 sec