SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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을 운영하고 있을까?
 

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

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
 

Similaire à 닷넷 개발자를 위한 패턴이야기 (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
 

Plus 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
 

Plus 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 다루기)
 

Dernier

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 

Dernier (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

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

  • 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.

Notes de l'éditeur

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