SlideShare una empresa de Scribd logo
1 de 70
Pattern Story   (for .NET Developers) YoungSu, Son [email_address] Microsoft MVP Devpia Architecture&Design Sysop Devpia .NET Framework 3.0 Sysop Samsung Electronics Home Solution Group
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Pattern & Model ,[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
What’s the Design Pattern?
Dessin ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Pattern is Father ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
The Definition of Design Pattern 좋은  S/W 의 밑 그림을 잘 그릴수 있는 지침 / 가이드라인
Model is Mother !!!
GoF 2 Principles ,[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
GoF 1 st  Principle. Program to an interface, Not to an implementation. ,[object Object],[object Object],[object Object],[object Object],[object Object]
Oh, down to lock …
How to use a key …
Oh, you  push  the PRESS button …
Who actually needs this data?
Why you don ’ t read rental car manuals  ,[object Object],[object Object],[object Object],[object Object],[object Object],The Power of Sameness
GoF 2 nd  Principle Favor Object Composition over Class Inheritance Don’t use  Inheritance?? Developer Only use Object Composition! A swindler
The Two Towers in Object World. Composition & Inheritance are Two Towers  in OO World A Great Architect
Inheritance and Composition 구분 상속 객체 합성 스타일 White Box Black Box 장점 단순하고 사용하기 편리 . 구조 명확 코드 재활용 약한 결합력 동적 바인딩 가능 캡슐화 유지 단점 부모 클래스에 종속성 발생 유연성 감소 클래스 수 폭발적 증가 캡슐화 파괴 구조가 복잡  사용시 유의해야 함 객체 수 증가 UML  구조
Composition versus Inheritance. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Eric Gamma
Types of Inheritance. Class Interface1  { ISomething() = 0; } Class Impl  { ISomething() { ..   do();   .. } } Subtyping Subclassing Interface1 +ISomething() Concrete Class1 +ISomething() Concrete Class2 +ISomething() Impl. +ISomething() Impl Inheritance +ISomething() Impl Inheritance +ISomething() A Great Architect Don’t use  Subclassing
GoF 2 nd  Principle. ,[object Object],[object Object],[object Object],[object Object]
Principles of GoF Pattern 객체합성 상속 (subtyping) SortAlgorithm Sort() BubbleSort Sort() QuickSort Sort() UltraSort Sort() DataArray SortAlgorithm* m_pSort SetAlgorithm(SortAlgorithm* pSort) Sort()
Basic Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Core Components of S/W Impl. 06/02/09 Devpia A&D EVA You must remember 3 Core Components! Common Part Configurable Part Variable Part Great Architect
Core Components of S/W Impl. 06/02/09 Devpia A&D EVA Configurable Part Variable Part Component  Configurator Factory Strategy <<LINKS>> <<CREATES>> Common Part (Modularity) Log Security Transaction AOP
Strategy Pattern ,[object Object],06/02/09 Devpia A&D EVA satellite Super Computer Do you think that  the same logic use between satellite and  super computer?
Strategy Pattern in GoF ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA CSort +Sorting() CBubble +Sorting() CQuick +Sorting()
Template Method Pattern ,[object Object],06/02/09 Devpia A&D EVA ODBC(JDBC) API Application ODBC (JDBC) Driver Manager MSSQL Driver Oracle Driver
Template Method Pattern in GoF 06/02/09 Devpia A&D EVA class CQueryTemplate { public void doQuery() {   string dbCommand;   dbCommand = FormatConnect();   dbCommand = FormantSelect(sql);   } ... } void main() { //pQT 라는 인터페이스를 선언한다 CQueryTemplate *pQT; Sql sql = “select * from AA”; if (GetDBProductInfo() = Oracle)   pQT = new COracleQT(); else    pQT = new CSqlSvrQT(); pQt->doQuery(sql); delete pQt; } CQueryTemplate +doQuery() #FormatConnect() #FormatSelect() COracleQT #FormatConnect() #FormatSelect() CSqlSvrQT #FormatConnect() #FormatSelect() Inversion of Control (Hollywood Principle)
Component Configurator Pattern ,[object Object],06/02/09 Devpia A&D EVA Configuration File HTTP Protocol Text Based  Log Component DES RSA XML Based Log Component FTP Protocol When  Change Config File Info , Component  Configuration  (Attribute)  dynamically Changes ! Great Architect
Component Configurator in POSA2 06/02/09 Devpia A&D EVA Component +Init() +Fini() +Suspend() +Resume() +Info() Core Component Core Component Component Repository Component Configurator
Component Configurator in POSA2 06/02/09 Devpia A&D EVA
Component Configurator Sample ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA Advanced Topic Reflection
Component Configurator Example ,[object Object],In App.config. <?xml version=&quot;1.0“ encoding=&quot;utf-8&quot; ?> <configuration>      <appSettings>         <add key=&quot;sqlCon&quot; value=&quot; 컨넥션 스트링 정의 &quot;/>      </appSettings> </configuration>  In C# Code. System.Configuration.ConfigurationSetings.AppSetting[“sqlCon”];
Reflection Pattern in POSA1 Component A UserInterface MetaObject A MetaObject B MOP Meta Level Base Level Component B uses uses uses uses modifies modifies provides  access to further base-level components further meta-level components retrieves information
Reflection ModuleBuilder AssemblyModule =  CreatedAssembly.DefineDynamicModule(&quot;MathModule&quot;,&quot;Math.dll&quot;); TypeBuilder MathType = AssemblyModule.DefineType(&quot;DoMath&quot;, TypeAttributes.Public | TypeAttributes.Class); System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) }; MethodBuilder SumMethod =  MathType.DefineMethod(&quot;Sum&quot;,  MethodAttributes.Public, typeof(int), ParamTypes); ParameterBuilder Param1 =  SumMethod.DefineParameter(1,ParameterAttributes.In, &quot;num1&quot;); ParameterBuilder Param2 =  SumMethod.DefineParameter(1,ParameterAttributes.In, &quot;num2&quot;); . . . MathType.CreateType();  return CreatedAssembly;
Reflection using System; using System.Reflection; ... public class EmitDemoTest {  static void Main() {  ... System.Type MathType = EmitAssembly.GetType(&quot;DoMath&quot;); object[] Parameters = new object [2]; Parameters[0] = (object) (5); Parameters[1] = (object) (9); object EmitObj = Activator.CreateInstance (MathType,false); object Result = MathType.InvokeMember(&quot;Sum&quot;,  BindingFlags.InvokeMethod ,null,EmitObj,Parameters); Console.WriteLine(&quot;Sum of {0}+{1} is {2}&quot;,  Parameters[0],Parameters[1],Result.ToString()); Console.ReadLine(); } }
Pipe & Filter Pattern in POSA1 Protocol Handler InputOutput Handler component->svc() io->receive_data() Filter::svc() parse() Filter::svc() perform() Filter::svc() log() pipe io component Protocol Pipeline svc() Read Request svc() Filter svc() Filter svc() parse() Parse Headers svc() parse() Perform Request svc() perform() Log Request svc() log()
Using Pipeline Perform Request Log Request HTTP/ 1.0 200 OK Date: Thu, 09 Oct 01:26:00 GMT Server: Eva/1.0 Last-Modified: Wed, 08 Oct 1997 .. Content-Length : 12345 Content-Type : text/html <HTML> <TITLE> Homepage </TITLE> .. </HTML> any.net - - [09/Oct/1997:01:26:00 -0500] “ GET /~jxh/home.html HTTP/1.0 Read Request GET /~jxh/hoem.html HTTP/1.0 Connection: Keep-Alive User-Agent: Mothra/0.1 Host: any.net Accept: image/gif, image/jpeg, */* Parse Request GET /users/jxh/public_thml/home.html HTTP /1.0 Parse Headers CONNECTION USER_AGENT HOST ACCEPT ACCEPT ACCEPT Keep-Alive Mothra/0.1 any.net image/gif image/jpeg */*
Pipe & Filter in WCF Services Runtime Layer Messaging Layer Behaviors Channels Instancing Behavior Security Channel TCP Transport Channel UDP Transport Channel Cross-Proc Transport Channel Queue Transport Channel HTTP Transport Channel Full Duplex Channel Reliable Messaging Channel Custom Channel Transaction Behavior CLR Type Integration Behavior Throttling Behavior Metadata Behavior Error Handling Behavior Concurrency  Behavior Custom  Behavior Security Channel HTTP Transport Channel TCP Transport Channel UDP Transport Channel Reliable Messaging Channel Custom Channel Instancing Behavior Custom  Behavior Contract To Type Behavior
Factory Pattern ,[object Object],06/02/09 Devpia A&D EVA Main Function Based Coding Object Oriented Programming
Factory Pattern (Abstract Factory) ,[object Object],06/02/09 Devpia A&D EVA OO Design Advanced OO Design
Factory Pattern in GOF 06/02/09 Devpia A&D EVA void main() { CMessage *pMessage = new CMessage(); if ( GetComponentInfo(“Proto”) = HTTP )   pMessage->Protocol = HTTP; else   pMessage->Protocol = FTP; if ( GetComponentInfo(“Log”) = XML )   pMessage->Protocol = XML; else   pMessage->Protocol = TEXT; ... pMessage->Send(“Hello”); delete pMessage; } Abstract Factory +CrateProduct() Client Concrete Factory Abstract Product Concrete Product
Factory Pattern in GOF 06/02/09 Devpia A&D EVA class CFactory { CMessage* GetInstance() { CMessage *pMessage = new CMessage(); if ( GetComponentInfo(“Proto”) = HTTP )   pMessage->Protocol = HTTP; else   pMessage->Protocol = FTP; if ( GetComponentInfo(“Log”) = XML )   pMessage->Protocol = XML; else   pMessage->Protocol = TEXT; ... return pMessage; } } Abstract Factory +CrateProduct() Client Concrete Factory Abstract Product Concrete Product Reminds Component Configurator!!
3 Foe Patterns 06/02/09 Devpia A&D EVA Configurable Part Variable Part Common Part (Modularity) Log Security Transaction Component  Configurator Factory Strategy <<LINKS>> <<CREATES>>
Observer Pattern (Misconception) 06/02/09 Devpia A&D EVA Change Data Misconception!! Or Prejudices ( 편견 !) 1. Observation 2. Notification
Observer is Notifieer!! 06/02/09 Devpia A&D EVA Observer  in Observer Pattern  is Notifieer
Hollywood Principle 06/02/09 Devpia A&D EVA Applicants Manager Don’t  Call us!!
Hollywood Principle 06/02/09 Devpia A&D EVA Applicants Manager Don’t Call us! We Call You!!!
Flow of Observer Pattern 06/02/09 Devpia A&D EVA Data Client (Type1) Client (Type2) Client (Type3) Manager Client (Source) Observer is Notifieer Change 1. Change 2. Change 3. Notification
Observer Pattern in GoF 06/02/09 Devpia A&D EVA Subject +Attach (Observer o) +Detach (Observer o) +Notify() Concrete Subject Observer +Update () Concrete Observer
Publisher-Subscriber Replication DB Publisher Change DB Subscriber DB Subscriber DB Subscriber Reference Reference Reference
With Today’s Patterns Configuration File App.config Web.config Client A Client B Overhead!! File I/O Load Get Info Change Config File Notifiy Handler
With Today’s Patterns Configuration File App.config Web.config Client A Load Get Info Change Config File Notifiy FileSystemWatcher .NotifyFilter Handler A Smart Developer
Chain of Responsibility ,[object Object],06/02/09 Devpia A&D EVA
Chain of Responsibility ,[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Chain of Responsibility in GoF 06/02/09 Devpia A&D EVA +successor Client Handler +HandleRequest() Concrete Handler
Chain Of Responsibilty (cont’d) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Review ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Pattern Explore
How to Study Pattern? 06/02/09 Devpia A&D EVA
Architectural Pattern (POSA1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Patterns  For Concurrent & Networked Object (POSA2) 06/02/09 Devpia A&D EVA
Patterns for Resource Management (POSA3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA
Refactoring & Anti-Patterns 06/02/09 Devpia A&D EVA
Various Patterns 06/02/09 Devpia A&D EVA
Various Patterns 06/02/09 Devpia A&D EVA
References ,[object Object],[object Object],[object Object],[object Object],[object Object]
References ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Questions ,[object Object],[object Object],[object Object],06/02/09 Devpia A&D EVA

Más contenido relacionado

La actualidad más candente

Javaz. Functional design in Java 8.
Javaz. Functional design in Java 8.Javaz. Functional design in Java 8.
Javaz. Functional design in Java 8.Vadim Dubs
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing UpDavid Padbury
 
Ecmascript 2015 – best of new features()
Ecmascript 2015 – best of new features()Ecmascript 2015 – best of new features()
Ecmascript 2015 – best of new features()Miłosz Sobczak
 
Domänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit XtextDomänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit XtextDr. Jan Köhnlein
 
Use of Apache Commons and Utilities
Use of Apache Commons and UtilitiesUse of Apache Commons and Utilities
Use of Apache Commons and UtilitiesPramod Kumar
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answerssheibansari
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence APIThomas Wöhlke
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code SmellsMario Sangiorgio
 
It's complicated, but it doesn't have to be: a Dagger journey
It's complicated, but it doesn't have to be: a Dagger journeyIt's complicated, but it doesn't have to be: a Dagger journey
It's complicated, but it doesn't have to be: a Dagger journeyThiago “Fred” Porciúncula
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Johnny Sung
 
soscon2018 - Tracing for fun and profit
soscon2018 - Tracing for fun and profitsoscon2018 - Tracing for fun and profit
soscon2018 - Tracing for fun and profithanbeom Park
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策kwatch
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)Patricia Aas
 
Replace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeReplace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeAkira Takahashi
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondMario Fusco
 

La actualidad más candente (17)

Javaz. Functional design in Java 8.
Javaz. Functional design in Java 8.Javaz. Functional design in Java 8.
Javaz. Functional design in Java 8.
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
Ecmascript 2015 – best of new features()
Ecmascript 2015 – best of new features()Ecmascript 2015 – best of new features()
Ecmascript 2015 – best of new features()
 
Domänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit XtextDomänenspezifische Sprachen mit Xtext
Domänenspezifische Sprachen mit Xtext
 
Use of Apache Commons and Utilities
Use of Apache Commons and UtilitiesUse of Apache Commons and Utilities
Use of Apache Commons and Utilities
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answers
 
Summary of C++17 features
Summary of C++17 featuresSummary of C++17 features
Summary of C++17 features
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
C++ aptitude
C++ aptitudeC++ aptitude
C++ aptitude
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
It's complicated, but it doesn't have to be: a Dagger journey
It's complicated, but it doesn't have to be: a Dagger journeyIt's complicated, but it doesn't have to be: a Dagger journey
It's complicated, but it doesn't have to be: a Dagger journey
 
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
Flutter 是什麼?用 Flutter 會省到時間嗎? @ GDG Devfest2020
 
soscon2018 - Tracing for fun and profit
soscon2018 - Tracing for fun and profitsoscon2018 - Tracing for fun and profit
soscon2018 - Tracing for fun and profit
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)C++ for Java Developers (JavaZone Academy 2018)
C++ for Java Developers (JavaZone Academy 2018)
 
Replace OutputIterator and Extend Range
Replace OutputIterator and Extend RangeReplace OutputIterator and Extend Range
Replace OutputIterator and Extend Range
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
 

Destacado

Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in PracticeGanesh Samarthyam
 
Top 10 voip interview questions with answers
Top 10 voip interview questions with answersTop 10 voip interview questions with answers
Top 10 voip interview questions with answerslibbygray000
 
오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 정명훈 Jerry Jeong
 
Ch6-Software Engineering 9
Ch6-Software Engineering 9Ch6-Software Engineering 9
Ch6-Software Engineering 9Ian Sommerville
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?OpenStack Korea Community
 

Destacado (6)

Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in Practice
 
Top 10 voip interview questions with answers
Top 10 voip interview questions with answersTop 10 voip interview questions with answers
Top 10 voip interview questions with answers
 
Prangpanah
Prangpanah Prangpanah
Prangpanah
 
오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료) 오픈소스의 이해(교육자료)
오픈소스의 이해(교육자료)
 
Ch6-Software Engineering 9
Ch6-Software Engineering 9Ch6-Software Engineering 9
Ch6-Software Engineering 9
 
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
[OpenStack Days Korea 2016] Track1 - 카카오는 오픈스택 기반으로 어떻게 5000VM을 운영하고 있을까?
 

Similar a 닷넷 개발자를 위한 패턴이야기

Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesSriram Krishnan
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesJohn Brunswick
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroSteven Pignataro
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet Sagar Nakul
 
Javazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicJavazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicTimothy Perrett
 
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
EclipseCon 2008: Fundamentals of the Eclipse Modeling FrameworkEclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
EclipseCon 2008: Fundamentals of the Eclipse Modeling FrameworkDave Steinberg
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
 
NEOOUG 2010 Oracle Data Integrator Presentation
NEOOUG 2010 Oracle Data Integrator PresentationNEOOUG 2010 Oracle Data Integrator Presentation
NEOOUG 2010 Oracle Data Integrator Presentationaskankit
 
Eclipse Modeling Framework
Eclipse Modeling FrameworkEclipse Modeling Framework
Eclipse Modeling FrameworkAjay K
 
Java one 2010
Java one 2010Java one 2010
Java one 2010scdn
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalystdwm042
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Pythongturnquist
 
Debugging and Error handling
Debugging and Error handlingDebugging and Error handling
Debugging and Error handlingSuite Solutions
 
Introduction To ASP.NET MVC
Introduction To ASP.NET MVCIntroduction To ASP.NET MVC
Introduction To ASP.NET MVCAlan Dean
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLsintelliyole
 
Declarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleDeclarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleFelix Meschberger
 

Similar a 닷넷 개발자를 위한 패턴이야기 (20)

Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Strutsjspservlet
Strutsjspservlet Strutsjspservlet
Strutsjspservlet
 
Javazone 2010-lift-framework-public
Javazone 2010-lift-framework-publicJavazone 2010-lift-framework-public
Javazone 2010-lift-framework-public
 
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
EclipseCon 2008: Fundamentals of the Eclipse Modeling FrameworkEclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
EclipseCon 2008: Fundamentals of the Eclipse Modeling Framework
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 
NEOOUG 2010 Oracle Data Integrator Presentation
NEOOUG 2010 Oracle Data Integrator PresentationNEOOUG 2010 Oracle Data Integrator Presentation
NEOOUG 2010 Oracle Data Integrator Presentation
 
GWT Extreme!
GWT Extreme!GWT Extreme!
GWT Extreme!
 
Eclipse Modeling Framework
Eclipse Modeling FrameworkEclipse Modeling Framework
Eclipse Modeling Framework
 
Java one 2010
Java one 2010Java one 2010
Java one 2010
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
 
Intro To Spring Python
Intro To Spring PythonIntro To Spring Python
Intro To Spring Python
 
Debugging and Error handling
Debugging and Error handlingDebugging and Error handling
Debugging and Error handling
 
Introduction To ASP.NET MVC
Introduction To ASP.NET MVCIntroduction To ASP.NET MVC
Introduction To ASP.NET MVC
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
 
Declarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi styleDeclarative Services Dependency Injection OSGi style
Declarative Services Dependency Injection OSGi style
 

Más de YoungSu Son

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴 YoungSu Son
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningYoungSu Son
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화YoungSu Son
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) YoungSu Son
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)YoungSu Son
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기) YoungSu Son
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) YoungSu Son
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) YoungSu Son
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 YoungSu Son
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항 YoungSu Son
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법YoungSu Son
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기YoungSu Son
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법 YoungSu Son
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionYoungSu Son
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 

Más de YoungSu Son (20)

Fault Tolerance 패턴
Fault Tolerance 패턴 Fault Tolerance 패턴
Fault Tolerance 패턴
 
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance TuningClean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
 
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
 
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭) Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
 
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
 
Singleton 패턴 (김진영 - EVA, 소마에 10기)
Singleton 패턴 (김진영 -  EVA, 소마에 10기) Singleton 패턴 (김진영 -  EVA, 소마에 10기)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기) 생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) 모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
 
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법 DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와  Oreo 의 개선사항 Android 성능 지표와  Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
 
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법안드로이드 Oreo의 변화와  모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + GenymotionAndroid Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 

Último

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Último (20)

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

닷넷 개발자를 위한 패턴이야기

  • 1. Pattern Story (for .NET Developers) YoungSu, Son [email_address] Microsoft MVP Devpia Architecture&Design Sysop Devpia .NET Framework 3.0 Sysop Samsung Electronics Home Solution Group
  • 2.
  • 3.
  • 5.
  • 6.
  • 7. The Definition of Design Pattern 좋은 S/W 의 밑 그림을 잘 그릴수 있는 지침 / 가이드라인
  • 9.
  • 10.
  • 11. Oh, down to lock …
  • 12. How to use a key …
  • 13. Oh, you push the PRESS button …
  • 14. Who actually needs this data?
  • 15.
  • 16. GoF 2 nd Principle Favor Object Composition over Class Inheritance Don’t use Inheritance?? Developer Only use Object Composition! A swindler
  • 17. The Two Towers in Object World. Composition & Inheritance are Two Towers in OO World A Great Architect
  • 18. Inheritance and Composition 구분 상속 객체 합성 스타일 White Box Black Box 장점 단순하고 사용하기 편리 . 구조 명확 코드 재활용 약한 결합력 동적 바인딩 가능 캡슐화 유지 단점 부모 클래스에 종속성 발생 유연성 감소 클래스 수 폭발적 증가 캡슐화 파괴 구조가 복잡 사용시 유의해야 함 객체 수 증가 UML 구조
  • 19.
  • 20. Types of Inheritance. Class Interface1 { ISomething() = 0; } Class Impl { ISomething() { .. do(); .. } } Subtyping Subclassing Interface1 +ISomething() Concrete Class1 +ISomething() Concrete Class2 +ISomething() Impl. +ISomething() Impl Inheritance +ISomething() Impl Inheritance +ISomething() A Great Architect Don’t use Subclassing
  • 21.
  • 22. Principles of GoF Pattern 객체합성 상속 (subtyping) SortAlgorithm Sort() BubbleSort Sort() QuickSort Sort() UltraSort Sort() DataArray SortAlgorithm* m_pSort SetAlgorithm(SortAlgorithm* pSort) Sort()
  • 23.
  • 24. Core Components of S/W Impl. 06/02/09 Devpia A&D EVA You must remember 3 Core Components! Common Part Configurable Part Variable Part Great Architect
  • 25. Core Components of S/W Impl. 06/02/09 Devpia A&D EVA Configurable Part Variable Part Component Configurator Factory Strategy <<LINKS>> <<CREATES>> Common Part (Modularity) Log Security Transaction AOP
  • 26.
  • 27.
  • 28.
  • 29. Template Method Pattern in GoF 06/02/09 Devpia A&D EVA class CQueryTemplate { public void doQuery() { string dbCommand; dbCommand = FormatConnect(); dbCommand = FormantSelect(sql); } ... } void main() { //pQT 라는 인터페이스를 선언한다 CQueryTemplate *pQT; Sql sql = “select * from AA”; if (GetDBProductInfo() = Oracle) pQT = new COracleQT(); else pQT = new CSqlSvrQT(); pQt->doQuery(sql); delete pQt; } CQueryTemplate +doQuery() #FormatConnect() #FormatSelect() COracleQT #FormatConnect() #FormatSelect() CSqlSvrQT #FormatConnect() #FormatSelect() Inversion of Control (Hollywood Principle)
  • 30.
  • 31. Component Configurator in POSA2 06/02/09 Devpia A&D EVA Component +Init() +Fini() +Suspend() +Resume() +Info() Core Component Core Component Component Repository Component Configurator
  • 32. Component Configurator in POSA2 06/02/09 Devpia A&D EVA
  • 33.
  • 34.
  • 35. Reflection Pattern in POSA1 Component A UserInterface MetaObject A MetaObject B MOP Meta Level Base Level Component B uses uses uses uses modifies modifies provides access to further base-level components further meta-level components retrieves information
  • 36. Reflection ModuleBuilder AssemblyModule = CreatedAssembly.DefineDynamicModule(&quot;MathModule&quot;,&quot;Math.dll&quot;); TypeBuilder MathType = AssemblyModule.DefineType(&quot;DoMath&quot;, TypeAttributes.Public | TypeAttributes.Class); System.Type [] ParamTypes = new Type[] {typeof(int),typeof(int) }; MethodBuilder SumMethod = MathType.DefineMethod(&quot;Sum&quot;, MethodAttributes.Public, typeof(int), ParamTypes); ParameterBuilder Param1 = SumMethod.DefineParameter(1,ParameterAttributes.In, &quot;num1&quot;); ParameterBuilder Param2 = SumMethod.DefineParameter(1,ParameterAttributes.In, &quot;num2&quot;); . . . MathType.CreateType(); return CreatedAssembly;
  • 37. Reflection using System; using System.Reflection; ... public class EmitDemoTest { static void Main() { ... System.Type MathType = EmitAssembly.GetType(&quot;DoMath&quot;); object[] Parameters = new object [2]; Parameters[0] = (object) (5); Parameters[1] = (object) (9); object EmitObj = Activator.CreateInstance (MathType,false); object Result = MathType.InvokeMember(&quot;Sum&quot;, BindingFlags.InvokeMethod ,null,EmitObj,Parameters); Console.WriteLine(&quot;Sum of {0}+{1} is {2}&quot;, Parameters[0],Parameters[1],Result.ToString()); Console.ReadLine(); } }
  • 38. Pipe & Filter Pattern in POSA1 Protocol Handler InputOutput Handler component->svc() io->receive_data() Filter::svc() parse() Filter::svc() perform() Filter::svc() log() pipe io component Protocol Pipeline svc() Read Request svc() Filter svc() Filter svc() parse() Parse Headers svc() parse() Perform Request svc() perform() Log Request svc() log()
  • 39. Using Pipeline Perform Request Log Request HTTP/ 1.0 200 OK Date: Thu, 09 Oct 01:26:00 GMT Server: Eva/1.0 Last-Modified: Wed, 08 Oct 1997 .. Content-Length : 12345 Content-Type : text/html <HTML> <TITLE> Homepage </TITLE> .. </HTML> any.net - - [09/Oct/1997:01:26:00 -0500] “ GET /~jxh/home.html HTTP/1.0 Read Request GET /~jxh/hoem.html HTTP/1.0 Connection: Keep-Alive User-Agent: Mothra/0.1 Host: any.net Accept: image/gif, image/jpeg, */* Parse Request GET /users/jxh/public_thml/home.html HTTP /1.0 Parse Headers CONNECTION USER_AGENT HOST ACCEPT ACCEPT ACCEPT Keep-Alive Mothra/0.1 any.net image/gif image/jpeg */*
  • 40. Pipe & Filter in WCF Services Runtime Layer Messaging Layer Behaviors Channels Instancing Behavior Security Channel TCP Transport Channel UDP Transport Channel Cross-Proc Transport Channel Queue Transport Channel HTTP Transport Channel Full Duplex Channel Reliable Messaging Channel Custom Channel Transaction Behavior CLR Type Integration Behavior Throttling Behavior Metadata Behavior Error Handling Behavior Concurrency Behavior Custom Behavior Security Channel HTTP Transport Channel TCP Transport Channel UDP Transport Channel Reliable Messaging Channel Custom Channel Instancing Behavior Custom Behavior Contract To Type Behavior
  • 41.
  • 42.
  • 43. Factory Pattern in GOF 06/02/09 Devpia A&D EVA void main() { CMessage *pMessage = new CMessage(); if ( GetComponentInfo(“Proto”) = HTTP ) pMessage->Protocol = HTTP; else pMessage->Protocol = FTP; if ( GetComponentInfo(“Log”) = XML ) pMessage->Protocol = XML; else pMessage->Protocol = TEXT; ... pMessage->Send(“Hello”); delete pMessage; } Abstract Factory +CrateProduct() Client Concrete Factory Abstract Product Concrete Product
  • 44. Factory Pattern in GOF 06/02/09 Devpia A&D EVA class CFactory { CMessage* GetInstance() { CMessage *pMessage = new CMessage(); if ( GetComponentInfo(“Proto”) = HTTP ) pMessage->Protocol = HTTP; else pMessage->Protocol = FTP; if ( GetComponentInfo(“Log”) = XML ) pMessage->Protocol = XML; else pMessage->Protocol = TEXT; ... return pMessage; } } Abstract Factory +CrateProduct() Client Concrete Factory Abstract Product Concrete Product Reminds Component Configurator!!
  • 45. 3 Foe Patterns 06/02/09 Devpia A&D EVA Configurable Part Variable Part Common Part (Modularity) Log Security Transaction Component Configurator Factory Strategy <<LINKS>> <<CREATES>>
  • 46. Observer Pattern (Misconception) 06/02/09 Devpia A&D EVA Change Data Misconception!! Or Prejudices ( 편견 !) 1. Observation 2. Notification
  • 47. Observer is Notifieer!! 06/02/09 Devpia A&D EVA Observer in Observer Pattern is Notifieer
  • 48. Hollywood Principle 06/02/09 Devpia A&D EVA Applicants Manager Don’t Call us!!
  • 49. Hollywood Principle 06/02/09 Devpia A&D EVA Applicants Manager Don’t Call us! We Call You!!!
  • 50. Flow of Observer Pattern 06/02/09 Devpia A&D EVA Data Client (Type1) Client (Type2) Client (Type3) Manager Client (Source) Observer is Notifieer Change 1. Change 2. Change 3. Notification
  • 51. Observer Pattern in GoF 06/02/09 Devpia A&D EVA Subject +Attach (Observer o) +Detach (Observer o) +Notify() Concrete Subject Observer +Update () Concrete Observer
  • 52. Publisher-Subscriber Replication DB Publisher Change DB Subscriber DB Subscriber DB Subscriber Reference Reference Reference
  • 53. With Today’s Patterns Configuration File App.config Web.config Client A Client B Overhead!! File I/O Load Get Info Change Config File Notifiy Handler
  • 54. With Today’s Patterns Configuration File App.config Web.config Client A Load Get Info Change Config File Notifiy FileSystemWatcher .NotifyFilter Handler A Smart Developer
  • 55.
  • 56.
  • 57. Chain of Responsibility in GoF 06/02/09 Devpia A&D EVA +successor Client Handler +HandleRequest() Concrete Handler
  • 58.
  • 59.
  • 61. How to Study Pattern? 06/02/09 Devpia A&D EVA
  • 62.
  • 63. Patterns For Concurrent & Networked Object (POSA2) 06/02/09 Devpia A&D EVA
  • 64.
  • 65. Refactoring & Anti-Patterns 06/02/09 Devpia A&D EVA
  • 66. Various Patterns 06/02/09 Devpia A&D EVA
  • 67. Various Patterns 06/02/09 Devpia A&D EVA
  • 68.
  • 69.
  • 70.

Notas del editor

  1. POSA2/Dispatcher 06/02/09 Devpia A&amp;D Eva