14. 여러 개의
패턴이 뭉쳐서 움직인다.
Strategy
Common
Variable Part
<<CREATES>>
Part
Factory (Modularity)
Log
<<LINKS>>
Security
Configurable
Part Component Transaction
Configurator
18. 조직을 변화시키는 패턴.
새로운 생각을
조직에 전파하는
48가지의
패턴과 패턴 언어들.
Linda Rising과 Fearless Change 책 소개 –
http://arload.wordpress.com/2009/09/18/plop-linda-rising-fearless-change/
19. 소프트웨어 관련된
모든 행위들을 다룬다.
팀을 이루어 설계 대련을 수행하는 패턴
+
http://portal.acm.org/citation.cfm?id=273484
팀 생산성을 향상 시키는 패턴
http://arload.wordpress.com/2008/09/02/teamproductivity/
그 외에도 기타 등등….
지리적으로 떨어져 있는 팀 협업하는 패턴
http://hillside.net/plop/2006/Papers/Library/patternstoenablePLoP2006_sub
mission_v4.pdf
http://arload.wordpress.com/2008/04/02/plopfestival/
http://hillside.net/plop/2004/papers/vbricout0/PLoP2004_vbricout0_0.doc
효율적인 회의를 이끄는 패턴
http://hillside.net/europlop/europlop2005/workshops/
25. 아키텍쳐의 이해 대상
Martin Fowler says …
The expert developers working on that project have
a shared understanding of the system design.
This shared understanding is called ‘architecture’
http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
36. Template Method
Class QueryTemplate
{ public void doQuery()
QueryTemplate {
string dbCommand;
dbCommand = FormatConnect();
+doQuery() dbCommand = FormantSelect(sql);
#FormatConnect() } ...
#FormatSelect() }
void main()
{ //pQT라는 인터페이스를 선언핚다
Inversion of Control QueryTemplate QT;
Sql sql = “select * from AA”;
(Hollywood Principle)
if (GetDBProductInfo() = Oracle)
QT = new OracleQT();
else
OracleQT SqlSvrQT QT = new SqlSvrQT();
Qt->doQuery(sql);
#FormatConnect() #FormatConnect()
}
#FormatSelect() #FormatSelect()
37. Component Configurator
설정 파일 정보가 바뀌면
소프트웨어의
코드 수정없이
속성이 변경되어라!! Text Based
XML
Log
Component
DES
RSA
Configuration HTTP
FTP Protocol
File Protocol
Great Architect
39. Component Configurator
void main()
<xml version =“1.0”> {
<Components>
<!– Protocol 정보 선택 --> IMessage iMessage = new Message();
<Protocol>
HTTP if (GetComponentInfo(“Protocol”) = HTTP)
iMessage->Protocol = HTTP;
</Protocol>
else
iMessage->Protocol = FTP;
<!– Log 정보 선택 -->
<Log>
if (GetComponentInfo(“Log”) = XML)
XML
iMessage->Protocol = XML;
</Log>
else
iMessage->Protocol = TEXT;
<!– 보안 알고리즘 선택 --> Advanced Topic
<SecuAlgorithm> Reflection ...
DES
</SecuAltorithm> iMessage->Send(“Hello”);}
</Components>
Devpia A&D EVA 10/20/2009 39
40. Reflection
Meta Level
further
meta-level modifies
components
MetaObject A MetaObject B MOP
modifies
retrieves
information
uses uses uses uses
Component A further Component B UserInterface
base-level provides
components access to
Base Level
51. 패턴 가족 이야기 2
Get Info
Change
Handler Load Config File
Notifiy
Client A
Overhead!!
Configuration File
App.config
File I/O
Web.config
Client B
52. 패턴 가족 이야기 2
Get Info
Change
Handler Load Config File
Notifiy
Client A
FileSystemWatcher
.NotifyFilter Configuration File
App.config
Web.config
A Smart Developer
55. 무거운 (Heavy Dependency) 상황
// your API
public class Tracer {
MessageQueue mq = new MessageQueue(…);
public void Trace(string message){
mq.Send(message);
}
}
// your customer’s program that is hard to test
Tracer tracer = new Tracer();
public void ProcessOrder(Order order){
tracer.Trace(order.Id);
…
}
56. Inversion of Control
// your better API
public abstract class TraceListener {
public abstract void Trace(string message);
}
public class Tracer {
TraceListener listener;
Template Method
public Tracer(TraceListener listener){
&
this.listener = listener;
} Publisher/Subscriber
public void Trace(string message){
listener.Trace(message);
}
}
57. Dependency Injection
// your customer’s program that is easier to test
Tracer tracer = new Tracer(new FileListener());
public void ProcessOrder(Order order){
tracer.Trace(order.Id);
…
}
58. Dependency Injection Container
// customer’s program that is even easier to test
Tracer tracer = container.Resolve<Tracer>();
public void ProcessOrder(Order order){
tracer.Trace(order.Id);
…
}
Check out DI Containers (a.k.a. IoC Containers): autofac,
Castle Windsor, PicoContainer.NET, Spring.NET,
StructureMap, Unity, nInject and others.
http://www.nInject.org
http://www.springframework.net/
79. 패턴의 확장된 구성요소(Components)
Name / Aliases Side Effect
Context Rationale
Forces Known Use
Problem Related Pattern
Solution Sketch
Resulting Context References
80. 구성요소들에 대한
재미난 이야기들은..
각각의 구성요소에 대한 자세한 설명 –
확장된 PLoP 패턴 구성 요소들
http://arload.wordpress.com/2009/09/03/plop-pattern-template/
추가된 구성 요소의 유래 –
Linda Rising의 패턴 만드는 법
http://arload.wordpress.com/2009/10/09/fearless-change-2-strategies-or-pattern/
89. References
Frank Buschmann et al, “Pattern-Oriented Software
Architecture : A System of Patterns”, Volume 1, Wiley
Douglas Schmidt et al, “Pattern-Oriented Software
Architecture”, Volume 2, Wiley
Eric Gamma et al, “Design Patterns : Elements of Reusable
Object Oriented Software” , Addison Wesley
Pipe & Filter Pattern,
http://www.codeproject.com/cs/design/PipesAndFilters.asp
Reflection Pattern,
http://www.codeproject.com/csharp/introreflection.asp
90. References
FileSystemWatcher.NotifyFilter
http://msdn2.microsoft.com/en-
us/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx
Pattern Language of Program Design
http://www.hillside.net
그 외의 패턴 이야기 (나의 블로그 ..)
http://www.arload.net or http://arload.wordpress.com
소프트웨어 공학 커뮤니티 80개의 무료 강좌들- EvaCast
http://www.evacast.net