miss_pattern_v2
-
Upload
youngsu-son -
Category
Technology
-
view
2.395 -
download
0
description
Transcript of miss_pattern_v2
미워도 다시 보는 패턴 이야기.
EvaCast 리더http://www.evacast.net데브피아 아키텍쳐 시삽
Blog - 아키텍트로 가는 길.http://www.arload.net
오늘 나눌 이야기 거리들.
패턴의 정의 (패턴이란?)
패턴에 대핚 오해와 짂실
패턴으로 가는 길
패턴 구성요소 바로 알기
패턴의 올바른 학습 가이드라인
1. 도대체..
패턴은 무엇일까?
Pattern
is
Father
우리는 아버지와 비슷한
생김새, 성격, 습관 등을
가지고 있다.
이미 해결한 문제와
유사한 문제들은..
유사한 방법(패턴)으로
해결 할 수 있다.
그럼 패턴은 과연..
왜 내가 적용하려면
안될까?
2. 패턴에 대한 오해와 진실
GoF 23개의 Pattern으로
우아한 프로그램 만들기?
지구상의 패턴들..
+ 논문 형태로 발표된
패턴 몇 백개.
패턴은 섬이 아니다.
ConfigurablePart
VariablePart
Component Configurator
Factory
Strategy
<<LINKS>>
<<CREATES>>
CommonPart
(Modularity)
Log
Security
Transaction
여러 개의
패턴이 뭉쳐서 움직인다.
여러 개의
패턴이 뭉쳐서 움직인다.
패턴은 소프트웨어 설계
쪽만 다룬다?
솔로들을 위한 패턴?
http://www.amazon.com/Dating-Design-Patterns-Solveig-Haugland/dp/0974312002/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1239125189&sr=8-1
조직을 변화시키는 패턴.
Linda Rising과 Fearless Change 책 소개 –
http://arload.wordpress.com/2009/09/18/plop-linda-rising-fearless-change/
새로운 생각을
조직에 전파하는
48가지의
패턴과 패턴 언어들.
소프트웨어 관련된모든 행위들을 다룬다.
팀을 이루어 설계 대련을 수행하는 패턴 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://hillside.net/plop/2004/papers/vbricout0/PLoP2004_vbricout0_0.doc
효율적인 회의를 이끄는 패턴 http://hillside.net/europlop/europlop2005/workshops/
+ 그 외에도 기타 등등….http://arload.wordpress.com/2008/04/02/plopfestival/
패턴은 만병통치약?
비약적인 성능 향상 ?
생산성 증대 ?
최적화 ?
심지어 Silver Bullet ??
패턴의 장점은..
유연성 확장성
3. 패턴으로 가는 길...
패턴에 대한 올바른 마음가짐
아키텍쳐의 이해 대상
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
역시 패턴도..
팀 내 의사 소통의 수단이
되기 위해선,
팀원들의 이해가 필요하다.
선무당이 사람 잡는다.
해당 그림 추가
패턴의 남용.
리소스 제약이 심한 시스템에
유연성 추가하기??
- Pipe & Filter
- Component Configurator
패턴의 가족관계를 찾아라!
Compound Pattern
versus
Composite Pattern
ConfigurablePart
VariablePart
Component Configurator
Factory
Strategy
<<LINKS>>
<<CREATES>>
CommonPart
Log
Security
Transaction
전형적인 가족관계
여러분을 위해
하나씩 나누어
설명드리겠습니다.
satellite SuperComputer
인공위성과슈퍼 컴퓨터의 정렬로직은 같을까요?
Strategy
void main()
{
//pSort라는 인터페이스를 선언핚다
ISort iSort;
if (GetSystemInfo() == Low)
{
//인공위성에서는 Bubble Sorting 사용
iSort = new CBubble();
}
else
{
//슈퍼 컴퓨터에는 Quick Sorting 사용
iSort = new CQuick();
}
iSort.Sorting();
}
ISort
+Sorting()
Bubble
+Sorting()
Quick
+Sorting()
Strategy
ODBC(JDBC) API
Application
ODBC (JDBC) Driver Manager
MSSQL Driver Oracle Driver
Template Method
QueryTemplate
+doQuery()#FormatConnect()#FormatSelect()
OracleQT
#FormatConnect()#FormatSelect()
SqlSvrQT
#FormatConnect()#FormatSelect()
Class QueryTemplate{ public void doQuery()
{string dbCommand;dbCommand = FormatConnect();dbCommand = FormantSelect(sql);} ...
}
void main(){ //pQT라는 인터페이스를 선언핚다
QueryTemplate QT;Sql sql = “select * from AA”;
if (GetDBProductInfo() = Oracle)QT = new OracleQT();
else QT = new SqlSvrQT();
Qt->doQuery(sql);
}
Inversion of Control(Hollywood Principle)
Template Method
ConfigurationFile
HTTPProtocol
Text Based LogComponent
DESRSA
XML BasedLogComponent
FTP Protocol
설정 파일 정보가 바뀌면소프트웨어의코드 수정없이속성이 변경되어라!!
Great Architect
Component Configurator
38
Component
+Init()+Fini()+Suspend()+Resume()+Info()
CoreComponent
CoreComponent
ComponentRepository
ComponentConfigurator
Component Configurator
10/20/2009Devpia A&D EVA 39
<xml version =“1.0”>
<Components>
<!– Protocol 정보 선택 -->
<Protocol>
HTTP
</Protocol>
<!– Log 정보 선택 -->
<Log>
XML
</Log>
<!– 보안 알고리즘 선택 -->
<SecuAlgorithm>
DES
</SecuAltorithm>
</Components>
void main()
{
IMessage iMessage = new Message();
if (GetComponentInfo(“Protocol”) = HTTP)
iMessage->Protocol = HTTP;
else
iMessage->Protocol = FTP;
if (GetComponentInfo(“Log”) = XML)
iMessage->Protocol = XML;
else
iMessage->Protocol = TEXT;
...
iMessage->Send(“Hello”);}
Advanced TopicReflection
Component Configurator
Component A UserInterface
MetaObject A MetaObject B MOP
Meta Level
Base Level
Component B
uses uses uses uses
modifies
modifies
provides access to
furtherbase-levelcomponents
furthermeta-levelcomponents
retrievesinformation
Reflection
ModuleBuilder AssemblyModule = CreatedAssembly.DefineDynamicModule("MathModule","Math.dll");
TypeBuilder MathType = AssemblyModule.DefineType("DoMath", TypeAttributes.Public | TypeAttributes.Class);
System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) };
MethodBuilder SumMethod = MathType.DefineMethod("Sum", MethodAttributes.Public, typeof(int), ParamTypes);
ParameterBuilder Param1 = SumMethod.DefineParameter(1,ParameterAttributes.In, "num1");
ParameterBuilder Param2 = SumMethod.DefineParameter(1,ParameterAttributes.In, "num2");
. . .MathType.CreateType(); return CreatedAssembly;
Reflection
using System;using System.Reflection;...
public class EmitDemoTest{ static void Main()
{ ...System.Type MathType = EmitAssembly.GetType("DoMath");object[] Parameters = new object [2];
Parameters[0] = (object) (5); Parameters[1] = (object) (9);object EmitObj = Activator.CreateInstance (MathType,false);object Result = MathType.InvokeMember("Sum",
BindingFlags.InvokeMethod ,null,EmitObj,Parameters);
Console.WriteLine("Sum of {0}+{1} is {2}", Parameters[0],Parameters[1],Result.ToString());
Console.ReadLine();}
}
Reflection
ConfigurablePart
VariablePart
Component Configurator
Factory
Strategy
<<LINKS>>
<<CREATES>>
CommonPart
Log
Security
Transaction
다시 보는 가족 관계
패턴 가족 이야기 2
10/20/2009Devpia A&D EVA 45
Change
1. Observation
2. Notification
Data
Starcraft 때문에생긴 오해!!
스타에서의 Observer
패턴에 있는 Observer는통보 받는 자(Notifieer)이다.
Applicants
Manager
Don’t Call us!!
Hollywood Principle
Applicants
Manager
Don’t Call us!
We Call You!!!
Hollywood Principle
Data
Client (Type1) Client (Type2) Client (Type3)
Manager Client (Source)
1. Change2. Change
3. Notification
Observer is Notifieer
Change
정확한 Observer
Subject
+Attach (Observer o)+Detach (Observer o)+Notify()
ConcreteSubject
Observer
+Update ()
ConcreteObserver
Observer
Configuration FileApp.configWeb.config
Handler
Client A
Client B
Overhead!!
File I/O
Load
Get Info
ChangeConfig File
Notifiy
패턴 가족 이야기 2
Configuration FileApp.configWeb.config
Handler
Client A
Load
Get Info
ChangeConfig File
Notifiy
A Smart Developer
FileSystemWatcher.NotifyFilter
패턴 가족 이야기 2
패턴 가족 이야기 3
무거운 의존관계.
무거운 (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);
…
}
// your better API
public abstract class TraceListener {
public abstract void Trace(string message);
}
public class Tracer {
TraceListener listener;
public Tracer(TraceListener listener){
this.listener = listener;
}
public void Trace(string message){
listener.Trace(message);
}
}
Inversion of Control
Template Method&
Publisher/Subscriber
// your customer’s program that is easier to test
Tracer tracer = new Tracer(new FileListener());
public void ProcessOrder(Order order){
tracer.Trace(order.Id);
…
}
Dependency Injection
// 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/
Dependency Injection Container
많은
가족관계 (Compound Pattern)
사례를 알아야..
실제 설계 시 적용하기 쉽다.
패턴과 SoC
(Separation of Concerns)
SoCis
"focusing one's attention upon some aspect”
결국 패턴은
복잡한 문제를
잘 SoC 하는
경험들을 모아놓은 산물..
JAWS - 웹 서버의복잡한 문제를 잘 SoC한 사례
패턴을 이용한 웹 서버 만들기 (한국어 강좌)
http://www.devpia.com/NET2/EvaCast/Lecture/?cu=view&r=11
하지만 현실에는..유연성에만 초점을맞추어 SoC 할 수 없다.
분산 객체 사례..CORBA, Web Service..
4. 패턴 구성요소 바로 알기
패턴의 구성요소(Components)
Name / Aliases
Context
Forces
Problem
Solution
Consequences
Known Use
Related Pattern
패턴에서 가장 중요시 봐야 할 구성요소는..
어머니의
재미난 조언..
못 올라갈나무는
쳐다 보지말아라
길고
짧은 건
대봐야
안다.
해결책 (조언)은 알았는데..
언제 이 조언을 사용하지?
어머니의 조언에서
빠진 것은?
Context
결과보다
어떤 상황에서
이 패턴을 적용하는지아는 것이 중요.
또 중요한 것 하나!
Context
Resulting
패턴 적용 시, 발생하는
단점과 Side Effect를주의 깊게 살펴보기
문제가 뭐야!!
Problem
현재 내가 처한
문제가 무엇인지..
제대로 알아야
패턴을 써 먹지.
실 사례를 살펴봐라
Known Use.
Known Use를 통해
실패와 성공의 이야기를 들어라
패턴의 확장된 구성요소(Components)
Name / Aliases Context Forces Problem Solution Resulting Context
Side Effect Rationale Known Use Related Pattern Sketch References
구성요소들에 대한재미난 이야기들은..
각각의 구성요소에 대한 자세한 설명 –
확장된 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/
5. 패턴의
올바른 학습 가이드라인.
10/20/2009Devpia A&D EVA 82
초보를 위한 패턴 빌드오더..
Layer
Pipe & Filter
Broker
Master Slave
Client – Dispatcher
Forwarder-Receiver
Model -View-Controller
Presentation -Abstraction - Control
Reflection
Counted Pointer
Blackboard
POSA 1 (아키텍쳐 패턴)
POSA 2 (분산 객체를 위한 패턴)
Resource Acquisition Lookup
Lazy Acquisition
Eager Acquisition
Partial Acquisition
Resource Lifecycle Caching
Pooling
Coordinator
Resource Lifecycle Manager
Resource Release Leasing
Evictor
10/20/2009Devpia A&D EVA 85
POSA 3 (자원 관리를 위한 패턴)
10/20/2009Devpia A&D EVA 86
그 외 패턴들..
10/20/2009Devpia A&D EVA 87
그 외 패턴들..
10/20/2009Devpia A&D EVA 88
그 외 패턴들..
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
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
References