SlideShare a Scribd company logo
1 of 117
Download to read offline
Framework EngineeringArchitecting, Designing, and Developing Reusable Libraries  http://www.arload.net
손영수 arload@live.com동완이 아빠, 인옥이 남편!!EVA팀 리더PLoP패턴 저자AsianPLoP공동의장Blog http://www.arload.net
Framework is ..
Framework is…
Douglas C. Schmidt Says.. Frameworks define “semi-complete” application  that embody domain-specific object structures and functionality.
Libraries is.. Application Block DATABASE ADTs MATH NETWORKING App Specific Logic OO Design Invocations GRAPHICS GUI Event Loop Singleton Strategy Selections Reactor Adapter State Active Object Design Pattern Class Library  Component  Architecture
But Framework is .. Active Object State NETWORKING GUI Control – Flow (IoC) MATH Reactor Event Loop App Specific Logic Invocations Callbacks ADTs Singleton Adapter DATABASE GRAPHICS Application Framework Component Architecture
Why Do You Need Framework? Productivity Avoid Duplication
Why Do You Need Framework? De Facto War
Welcome to My Framework Journey!
Seed References “Framework Engineering”, TechED 2007 Europe “Framework Design Guidelines” , Addison Wesley Krzysztof Cwalina Program Manager on .NET Framework Team
5 Topics.. D O P A V
OrganizationThe most powerful design tool O
Project Management Triangle Scope Time Cost O
Organization Project Management Triangle + 1 O
Do understand how organizational structure, culture, and decision making processes impact your product.  O
Conway's law If you have 4 groups working on a compiler, you’ll get a 4-pass compiler. O
Conway's law O
Conway's Clean State Approach O
Your Company Culture Is .. Voluntary ?? O
Your Company Culture Is .. Familial ?? O
Remember Your Company Culture .. O Peremptory
Organizational InfluencesSize of Organization Simple Design Consistency Design Focus on 80/20 Rules Small Team O
Organizational InfluencesSize of Organization Powerful Design Lack Consistency Remove Requirements Large Team O
Organizational InfluencesOrganization’s Culture/Biases Customer-Focused End-2-End Scenarios O
Organizational InfluencesOrganization’s Culture/Biases Technology-Focused Long Lasting Architecture O
Decision Making Process is.. 呼兄呼弟 O
Solution ?? Give this book your boss..
Planning Ensuring we are building the right thing  P
P
P
Skyscrapers Peanut Butter Focus: features Results: stability, incremental improvements, not great end-to-end scenarios Focus: scenarios  Results: Excitement, breakthroughs, but beware of leaving existing customers behind  P
Moderation (中庸)MileStone  = Scenarios + Feature Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 P
ArchitectureEnsuring the long term health of the framework A
Right Way??Choose right types. A
Taxonomy of TypesLibraries , Primitives, Abstractions A
Primitives Very little policy (behavior design decisions) Stable design Commonly appear in publicly accessible APIs Almost impossible to evolve/change design;         any design changes have huge breaking change impact on other APIs Example: Int32, String A
Libraries Definition: Libraries are types that are not passed  		between components Examples EventLog, Debug.  Easy to Evolve Leave old in, add new one Beware of duplication! A
Abstractions Definition: Abstractions are interfaces or classes with unsealed members that are passed between components. Examples Stream, IComponent Hard to Evolve Unfortunately, pressure to evolve A
Primitive Oriented Design A.K.A. “Handle based design” (functional) Great evolvability, poor usability (sometimes) Low level stable primitives + high level reusable components with limited dependencies other than to the primitives E.g. Type.GetType(object) – works, but not as convenient as Object.GetType A
Extension Method for primitive.. C# 3.0 New Feature namespace MyCompany.StringManipulation {      public static class StringExtensions{ public static bool IsNullOrEmpty(this string s){ 		return String.IsNullOrEmpty(s); 		  }      } } … using MyCompany.StringManipulation; string message= “hello world”; if(message.IsNullOrEmpty()){  	Console.WriteLine(“EMPTY”); }
Component Oriented Design Rich APIs with lots of features, thus with lots of dependencies Great usability, poor evolvability Good for higher level components, not for the core of a platform A
Do Manage Dependencies.. A A
Component is .. Lego, Plug ?? A
Component is .. .. a set of types that ship and evolve as a unit. A
Types of Dependencies A
API Dependency Component A has an API dependency on component B,  	if a type in B shows in the publicly accessible API surface of a type in A.  This includes: Base types and implemented interfaces Generic parameter constraints Return types and parameters of members Applied attributes Nested types A
Implemenatin Dependency If a type in A uses a type in B in its implementation. Hard Dependencies (required to run) Soft Dependencies (optional) A
Circular Dependency Component A depends on component B  and Component B depends on component A (even indirectly). A
Solution is Layering.. A
Solution is Layering.. A
WPF XML    BCL Reflection A Dependency Management
상황을 파악하는 좋은 방법DSM (Dependency Structure Matrix)
간단한 DSM
잘 계층화된 DSM
엄격한 계층화를 유지한 시스템의 DSM
불완전한 계층구조를 가진 시스템 Circular Dependency 발생.
또 하나의 도구– Code Metrics
xDepend(Ndepend, Xdepend, CDepend) NDepend - http://www.xdepend.com
Solution is.. Create a new package. A
circular dependency GUI Comm Analysis Protocol Modem Control Comm Error Database Message Manager A
Indirect circular dependency A X B Y A
Use Interface. A X Y <<interface>> BY B A
Heavy Depedency.. A
Solution is IoC A
Heavy Dependency. // your API public class Tracer { MessageQueue mq = new MessageQueue(…); 	public void Trace(string message){ 	 mq.Send(message); 	} }  // your customer’s program that is hard to test Tracer tracer = new Tracer(); public void ProcessOrder(Order order){ 	tracer.Trace(order.Id); 	… } A
Inversion of Control // your better API public abstract class TraceListener { 	public abstract void Trace(string message); }  public class Tracer { TraceListener listener; 	public Tracer(TraceListener listener){ 		this.listener = listener;  	} 	public void Trace(string message){ 	 		listener.Trace(message); 	} }  A
Dependency Injection // your customer’s program that is easier to test Tracer tracer = new Tracer(new FileListener()); public void ProcessOrder(Order order){ 	tracer.Trace(order.Id); 	… } A
Dependency Injection Containers // customer’s program that is even easier to test Tracer tracer = container.Resolve<Tracer>(); public void ProcessOrder(Order order){ 	tracer.Trace(order.Id); 	… } Check outDI Containers (a.k.a. IoC Containers):autofac, Castle Windsor, PicoContainer.NET, Spring.NET, StructureMap, Unity, nInject and others. http://www.nInject.org A
Packaging Principle Package Cohesion Principle REP (Release Reuse Equivalency) CCP (Common Closure Principle) CRP (Common Reuse Principle) Package Coupling Principle ADP (Acyclic Dependencies Principle) SDP (Stable Dependencies Principle) SAP (Stable Abstraction Principle) A Robert C. Martin, Principle of Package Architecture http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf
Do balance advances with compatibility. A
Types of “Compatibility”  Backward Cross-Version Forward A
Cross-Redist. A
A
Establishing Compatibility Bar Define what’s a “breaking change” This definition depends on the objective E.g. Enable portable code between Silverlight and .NET Framework E.g. Enable cross-version portability? A
Avoid duplication and overlap. A
Team Space Show and Tell Problem Space PLoP – Capable, Productive and Satisfied Patterns for Productivity http://hillside.net/plop/plop98/final_submissions/P54.pdf A
When to Replace Existing APIs When the new technology is “10x better” Make sure you understand the impact on the ecosystem What would happen if the BCL team added a new String? What’s the migration path for code using the old API? Support Automatic Migration Tool.   (VB -> VB.NET, .NET 1.0 -> .NET 2.0) Provide Code Based Migration Manual.  COM+ -> WCF , ASP.NET Web Service -> WCF A
DesignThis is where quality happens D
Is using your framework correctly like… Running across a desert? D
You need Feedback. D
Do design APIs by      first writing code samples for the main scenarios        and then  defining the object model to support the code samples. D
Code Samples D
Read File static void Main(string[] args) { StreamReadersr = File.OpenText("MyFile.txt");             string s = sr.ReadLine();             while (s != null) {                 s = sr.ReadLine(); Console.WriteLine(s); } } D
Feedback (Read File) static void Main(string[] args) { foreach (string s in File.ReadAllLines("MyFiles.text"))    { Console.WriteLine(s); } } D
Object Model Listing D
Framework Design Studio Assembly Exploer Project -> Add -> Assembly D Download here - http://code.msdn.microsoft.com/fds
Framework Design Studio Assembly Review Comment D
Framework Design StudioCompare API Versions D
Framework Design StudioCompare API Versions Red is removed,  Green is added, Grey means inherited. D
Framework Design StudioExporting to Microsoft Word Tools -> Export to Document D
Do treat simplicity as a feature. D
KISS (Keep It Simple! Stupid!) Remove Requirements (ATAM). Reuse Existing Concepts or APIs Adjust Abstraction Level  Consider framework users(experience, knowledge) Three Example D
Domeasure, measure, and measure! D
Specification Document: Qualities Performance Goals (XML Parser..) Baseline: What do is the best my API could do? Measure delta from the baseline Threat Models (Security ..) Threat: What is the worst that my component could do? Mitigate the threats Keep a balance between many other qualities      you want your framework to have (ATAM) D
 The POWER oFSameness D
 Read the manual?? When you pick up your rental car…. Push the seat all the way back Find an NPR station Find the exit D
Oh, down to lock… D
How to use a key… D
Oh, you push the PRESS button… D
Who actually needs this data? D
Why you don’t read manuals ??? You know how to drive your car All cars work basically the same way Your rental car is a car Therefore, you can drive your rental car That is… The power of sameness D
Static Analysis Tool  http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis D
DevelopmentThe bits customers get, … or not V
Branches and Integrations- Feature Crew http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Feature%20Crews%3a%20How%20Microsoft%20Does%20It V
Avoid integrating unfinished features. V
Feature Complete & Quality Gates Functional Specification Developer Design Specification Test Plan Threat Model API review Architectural Review Dependency Management Static Analysis Code Coverage Testing (Unit and Integration Tests) 0 Bugs Performance  V
Do pay your debt. V
Milestone Quality Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 Milestone Quality V
Milestone Quality (MQ) Initiatives that are hard to do in regular milestones Large productivity and efficiency improvements Infrastructure changes For example, a new source control system  Refactoring of fragile subsystems Internal implementation documentation Bugs backlog V
Summary Dounderstand how organizational structure, culture, and decision making processes impact your product.  Avoidpeanut-butter in Scenario Based Application. Domanage your dependencies. Dobalance advances with compatibility. Avoidduplication and overlap. Do design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples. Do treat simplicity as a feature. Domeasure, measure, and measure! Avoidintegrating unfinished features. Do pay your debt.
Resources Krzysztof Cwalina, Brad Abrams Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries http://channel9.msdn.com/pdc2008/PC58/ http://www.gotdotnet.com/team/fxcop
Resources Douglas C. Schmidt (PLoP Editor, POSA 2, 4 Writter) JAWS: An Application Framework for High Performance Web System http://citeseer.ist.psu.edu/81775.html  (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11  (Kr) Ralph Johnson (GoF , Design Patterns) Evolving Frameworks http://st-www.cs.uiuc.edu/users/droberts/evolve.html  (En) http://arload.wordpress.com/2008/09/15/evolvingframeworks/  (Kr)
Resources Robert C. Martin Principles of Package Architecture (Design Principles and Design Patterns) http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf (En)   http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=108 (Kr) For Korean People.. Load to Architect http://www.arload.net EvaCast  (Online Free Lecture) http://www.evacast.net
최근 저서 및 곧 나올 저서..
곧 나올 저서..
Question? 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0  대한민국 라이센스에 따라 이용하실 수 있습니다.   This work is licensed under Creative Commons Korea Attribution 2.0 License.

More Related Content

What's hot

Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007
Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007
Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007Arun Kumar
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questionsUmar Ali
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Technical interview questions
Technical interview questionsTechnical interview questions
Technical interview questionsSoba Arjun
 
8 most expected java interview questions
8 most expected java interview questions8 most expected java interview questions
8 most expected java interview questionsPoonam Kherde
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy CodeNaresh Jain
 
Java design pattern tutorial
Java design pattern tutorialJava design pattern tutorial
Java design pattern tutorialAshoka Vanjare
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ Ganesh Samarthyam
 
Class notes(week 9) on multithreading
Class notes(week 9) on multithreadingClass notes(week 9) on multithreading
Class notes(week 9) on multithreadingKuntal Bhowmick
 
25 java tough interview questions
25 java tough interview questions25 java tough interview questions
25 java tough interview questionsArun Banotra
 
Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK ExamplesEnder Aydin Orak
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)guestebde
 
Design patterns through refactoring
Design patterns through refactoringDesign patterns through refactoring
Design patterns through refactoringGanesh Samarthyam
 

What's hot (18)

Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007
Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007
Lulu.com.java.j2 ee.job.interview.companion.2nd.edition.apr.2007
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questions
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Object-oriented Basics
Object-oriented BasicsObject-oriented Basics
Object-oriented Basics
 
Creational Design Patterns
Creational Design PatternsCreational Design Patterns
Creational Design Patterns
 
Technical interview questions
Technical interview questionsTechnical interview questions
Technical interview questions
 
8 most expected java interview questions
8 most expected java interview questions8 most expected java interview questions
8 most expected java interview questions
 
Concurrency on the JVM
Concurrency on the JVMConcurrency on the JVM
Concurrency on the JVM
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 
Java design pattern tutorial
Java design pattern tutorialJava design pattern tutorial
Java design pattern tutorial
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++
 
Go f designpatterns 130116024923-phpapp02
Go f designpatterns 130116024923-phpapp02Go f designpatterns 130116024923-phpapp02
Go f designpatterns 130116024923-phpapp02
 
Class notes(week 9) on multithreading
Class notes(week 9) on multithreadingClass notes(week 9) on multithreading
Class notes(week 9) on multithreading
 
25 java tough interview questions
25 java tough interview questions25 java tough interview questions
25 java tough interview questions
 
Design Patterns & JDK Examples
Design Patterns & JDK ExamplesDesign Patterns & JDK Examples
Design Patterns & JDK Examples
 
C#/.NET Little Wonders
C#/.NET Little WondersC#/.NET Little Wonders
C#/.NET Little Wonders
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 
Design patterns through refactoring
Design patterns through refactoringDesign patterns through refactoring
Design patterns through refactoring
 

Viewers also liked

아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지YoungSu Son
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Sungchul Park
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
Software pattern
Software patternSoftware pattern
Software patternscor7910
 

Viewers also liked (7)

Pattern and EA
Pattern and EAPattern and EA
Pattern and EA
 
Bridgepattern
BridgepatternBridgepattern
Bridgepattern
 
아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지아키텍트가 알아야 할 12/97가지
아키텍트가 알아야 할 12/97가지
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
Software pattern
Software patternSoftware pattern
Software pattern
 

Similar to Framework engineering JCO 2011

Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Oliver Gierke
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklChristoph Pickl
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Groupbrada
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet IntroductionWei Sun
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLsintelliyole
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9google
 
Linq To The Enterprise
Linq To The EnterpriseLinq To The Enterprise
Linq To The EnterpriseDaniel Egan
 
iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)Netcetera
 
JavaScript Miller Columns
JavaScript Miller ColumnsJavaScript Miller Columns
JavaScript Miller ColumnsJonathan Fine
 
Dot Net Fundamentals
Dot Net FundamentalsDot Net Fundamentals
Dot Net FundamentalsLiquidHub
 
OpenDaylight and YANG
OpenDaylight and YANGOpenDaylight and YANG
OpenDaylight and YANGCoreStack
 
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...DicodingEvent
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Wei Sun
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework EngineeringYoungSu Son
 
P Training Presentation
P Training PresentationP Training Presentation
P Training PresentationGaurav Tyagi
 
Patterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxPatterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxdanhaley45372
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Pythondn
 
How to double .net code value
How to double .net code valueHow to double .net code value
How to double .net code valuejavOnet
 

Similar to Framework engineering JCO 2011 (20)

Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph Pickl
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Group
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Linq To The Enterprise
Linq To The EnterpriseLinq To The Enterprise
Linq To The Enterprise
 
iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)iPhone development from a Java perspective (Jazoon '09)
iPhone development from a Java perspective (Jazoon '09)
 
JavaScript Miller Columns
JavaScript Miller ColumnsJavaScript Miller Columns
JavaScript Miller Columns
 
Dot Net Fundamentals
Dot Net FundamentalsDot Net Fundamentals
Dot Net Fundamentals
 
OpenDaylight and YANG
OpenDaylight and YANGOpenDaylight and YANG
OpenDaylight and YANG
 
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework Engineering
 
P Training Presentation
P Training PresentationP Training Presentation
P Training Presentation
 
Patterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docxPatterns (contd)Software Development ProcessDesign patte.docx
Patterns (contd)Software Development ProcessDesign patte.docx
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Python
 
How to double .net code value
How to double .net code valueHow to double .net code value
How to double .net code value
 

More from 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
 

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

Recently uploaded

General Simple Guide About AI in Design By: A.L. Samar Hossam ElDin
General Simple Guide About AI in Design By: A.L. Samar Hossam ElDinGeneral Simple Guide About AI in Design By: A.L. Samar Hossam ElDin
General Simple Guide About AI in Design By: A.L. Samar Hossam ElDinSamar Hossam ElDin Ahmed
 
Karim apartment ideas 01 ppppppppppppppp
Karim apartment ideas 01 pppppppppppppppKarim apartment ideas 01 ppppppppppppppp
Karim apartment ideas 01 pppppppppppppppNadaMohammed714321
 
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...Pranav Subramanian
 
Imagist3D Architectural and Interior Rendering Portfolio
Imagist3D Architectural and Interior Rendering PortfolioImagist3D Architectural and Interior Rendering Portfolio
Imagist3D Architectural and Interior Rendering PortfolioAlinaLau2
 
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...Thomas Schielke
 
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...Pranav Subramanian
 
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...Pranav Subramanian
 
PORTFOLIO 2024 ANASTASIYA KUDINOVA
PORTFOLIO 2024       ANASTASIYA KUDINOVAPORTFOLIO 2024       ANASTASIYA KUDINOVA
PORTFOLIO 2024 ANASTASIYA KUDINOVAAnastasiya Kudinova
 
Interior Design for Office a cura di RMG Project Studio
Interior Design for Office a cura di RMG Project StudioInterior Design for Office a cura di RMG Project Studio
Interior Design for Office a cura di RMG Project StudioRMG Project Studio
 
UX Writing: How to Boost User Experience With UX Copies
UX Writing: How to Boost User Experience With UX CopiesUX Writing: How to Boost User Experience With UX Copies
UX Writing: How to Boost User Experience With UX CopiesYellowSlice1
 
eCultify brand guidelines- Shamika Dukle.pdf
eCultify brand guidelines- Shamika Dukle.pdfeCultify brand guidelines- Shamika Dukle.pdf
eCultify brand guidelines- Shamika Dukle.pdfswdukle
 
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...Pranav Subramanian
 
Niintendo Wii Presentation Template.pptx
Niintendo Wii Presentation Template.pptxNiintendo Wii Presentation Template.pptx
Niintendo Wii Presentation Template.pptxKevinYaelJimnezSanti
 
How Apple strives for the perfect sky and revives cities
How Apple strives for the perfect sky and revives citiesHow Apple strives for the perfect sky and revives cities
How Apple strives for the perfect sky and revives citiesThomas Schielke
 
A complete guide to the design thinking process
A complete guide to the design thinking processA complete guide to the design thinking process
A complete guide to the design thinking processRndexperts
 
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdf
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdfARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdf
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdfCristobalHeraud
 
Piece by Piece Magazine
Piece by Piece Magazine                      Piece by Piece Magazine
Piece by Piece Magazine CharlottePulte
 
ArtWaves 2024 - embracing Curves in Modern Homes
ArtWaves 2024 - embracing Curves in Modern HomesArtWaves 2024 - embracing Curves in Modern Homes
ArtWaves 2024 - embracing Curves in Modern HomesVellyslav Petrov
 
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSION
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSIONPORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSION
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSIONAnastasiya Kudinova
 

Recently uploaded (20)

General Simple Guide About AI in Design By: A.L. Samar Hossam ElDin
General Simple Guide About AI in Design By: A.L. Samar Hossam ElDinGeneral Simple Guide About AI in Design By: A.L. Samar Hossam ElDin
General Simple Guide About AI in Design By: A.L. Samar Hossam ElDin
 
Karim apartment ideas 01 ppppppppppppppp
Karim apartment ideas 01 pppppppppppppppKarim apartment ideas 01 ppppppppppppppp
Karim apartment ideas 01 ppppppppppppppp
 
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...
ALISIA: HOW MIGHT WE ACHIEVE HIGH ENVIRONMENTAL PERFORMANCE WHILE MAINTAINING...
 
Imagist3D Architectural and Interior Rendering Portfolio
Imagist3D Architectural and Interior Rendering PortfolioImagist3D Architectural and Interior Rendering Portfolio
Imagist3D Architectural and Interior Rendering Portfolio
 
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...
Cities Light Up in Solidarity With Ukraine: From Internationally Synchronized...
 
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...
LIGHTSCAPES: HOW MIGHT WE DESIGN AN INCLUSIVE AND ACCESSIBLE CLASSICAL CONCER...
 
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...
TIMBRE: HOW MIGHT WE REMEDY MUSIC DESERTS AND FACILITATE GROWTH OF A MUSICAL ...
 
PORTFOLIO 2024 ANASTASIYA KUDINOVA
PORTFOLIO 2024       ANASTASIYA KUDINOVAPORTFOLIO 2024       ANASTASIYA KUDINOVA
PORTFOLIO 2024 ANASTASIYA KUDINOVA
 
Interior Design for Office a cura di RMG Project Studio
Interior Design for Office a cura di RMG Project StudioInterior Design for Office a cura di RMG Project Studio
Interior Design for Office a cura di RMG Project Studio
 
UX Writing: How to Boost User Experience With UX Copies
UX Writing: How to Boost User Experience With UX CopiesUX Writing: How to Boost User Experience With UX Copies
UX Writing: How to Boost User Experience With UX Copies
 
eCultify brand guidelines- Shamika Dukle.pdf
eCultify brand guidelines- Shamika Dukle.pdfeCultify brand guidelines- Shamika Dukle.pdf
eCultify brand guidelines- Shamika Dukle.pdf
 
ASME B31.4-2022 estandar ductos año 2022
ASME B31.4-2022 estandar ductos año 2022ASME B31.4-2022 estandar ductos año 2022
ASME B31.4-2022 estandar ductos año 2022
 
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...
STITCH: HOW MIGHT WE PROMOTE AN EQUITABLE AND INCLUSIVE URBAN LIFESTYLE PRIOR...
 
Niintendo Wii Presentation Template.pptx
Niintendo Wii Presentation Template.pptxNiintendo Wii Presentation Template.pptx
Niintendo Wii Presentation Template.pptx
 
How Apple strives for the perfect sky and revives cities
How Apple strives for the perfect sky and revives citiesHow Apple strives for the perfect sky and revives cities
How Apple strives for the perfect sky and revives cities
 
A complete guide to the design thinking process
A complete guide to the design thinking processA complete guide to the design thinking process
A complete guide to the design thinking process
 
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdf
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdfARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdf
ARCHITECTURAL PORTFOLIO CRISTOBAL HERAUD 2024.pdf
 
Piece by Piece Magazine
Piece by Piece Magazine                      Piece by Piece Magazine
Piece by Piece Magazine
 
ArtWaves 2024 - embracing Curves in Modern Homes
ArtWaves 2024 - embracing Curves in Modern HomesArtWaves 2024 - embracing Curves in Modern Homes
ArtWaves 2024 - embracing Curves in Modern Homes
 
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSION
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSIONPORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSION
PORTFOLIO 2024_ANASTASIYA KUDINOVA / EXTENDED VERSION
 

Framework engineering JCO 2011

  • 1. Framework EngineeringArchitecting, Designing, and Developing Reusable Libraries http://www.arload.net
  • 2. 손영수 arload@live.com동완이 아빠, 인옥이 남편!!EVA팀 리더PLoP패턴 저자AsianPLoP공동의장Blog http://www.arload.net
  • 5. Douglas C. Schmidt Says.. Frameworks define “semi-complete” application that embody domain-specific object structures and functionality.
  • 6. Libraries is.. Application Block DATABASE ADTs MATH NETWORKING App Specific Logic OO Design Invocations GRAPHICS GUI Event Loop Singleton Strategy Selections Reactor Adapter State Active Object Design Pattern Class Library Component Architecture
  • 7. But Framework is .. Active Object State NETWORKING GUI Control – Flow (IoC) MATH Reactor Event Loop App Specific Logic Invocations Callbacks ADTs Singleton Adapter DATABASE GRAPHICS Application Framework Component Architecture
  • 8. Why Do You Need Framework? Productivity Avoid Duplication
  • 9. Why Do You Need Framework? De Facto War
  • 10. Welcome to My Framework Journey!
  • 11. Seed References “Framework Engineering”, TechED 2007 Europe “Framework Design Guidelines” , Addison Wesley Krzysztof Cwalina Program Manager on .NET Framework Team
  • 12. 5 Topics.. D O P A V
  • 14. Project Management Triangle Scope Time Cost O
  • 16. Do understand how organizational structure, culture, and decision making processes impact your product. O
  • 17. Conway's law If you have 4 groups working on a compiler, you’ll get a 4-pass compiler. O
  • 19. Conway's Clean State Approach O
  • 20. Your Company Culture Is .. Voluntary ?? O
  • 21. Your Company Culture Is .. Familial ?? O
  • 22. Remember Your Company Culture .. O Peremptory
  • 23. Organizational InfluencesSize of Organization Simple Design Consistency Design Focus on 80/20 Rules Small Team O
  • 24. Organizational InfluencesSize of Organization Powerful Design Lack Consistency Remove Requirements Large Team O
  • 25. Organizational InfluencesOrganization’s Culture/Biases Customer-Focused End-2-End Scenarios O
  • 26. Organizational InfluencesOrganization’s Culture/Biases Technology-Focused Long Lasting Architecture O
  • 27. Decision Making Process is.. 呼兄呼弟 O
  • 28. Solution ?? Give this book your boss..
  • 29. Planning Ensuring we are building the right thing P
  • 30. P
  • 31. P
  • 32. Skyscrapers Peanut Butter Focus: features Results: stability, incremental improvements, not great end-to-end scenarios Focus: scenarios Results: Excitement, breakthroughs, but beware of leaving existing customers behind P
  • 33. Moderation (中庸)MileStone = Scenarios + Feature Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 P
  • 34. ArchitectureEnsuring the long term health of the framework A
  • 36. Taxonomy of TypesLibraries , Primitives, Abstractions A
  • 37. Primitives Very little policy (behavior design decisions) Stable design Commonly appear in publicly accessible APIs Almost impossible to evolve/change design; any design changes have huge breaking change impact on other APIs Example: Int32, String A
  • 38. Libraries Definition: Libraries are types that are not passed between components Examples EventLog, Debug. Easy to Evolve Leave old in, add new one Beware of duplication! A
  • 39. Abstractions Definition: Abstractions are interfaces or classes with unsealed members that are passed between components. Examples Stream, IComponent Hard to Evolve Unfortunately, pressure to evolve A
  • 40. Primitive Oriented Design A.K.A. “Handle based design” (functional) Great evolvability, poor usability (sometimes) Low level stable primitives + high level reusable components with limited dependencies other than to the primitives E.g. Type.GetType(object) – works, but not as convenient as Object.GetType A
  • 41. Extension Method for primitive.. C# 3.0 New Feature namespace MyCompany.StringManipulation { public static class StringExtensions{ public static bool IsNullOrEmpty(this string s){ return String.IsNullOrEmpty(s); } } } … using MyCompany.StringManipulation; string message= “hello world”; if(message.IsNullOrEmpty()){ Console.WriteLine(“EMPTY”); }
  • 42. Component Oriented Design Rich APIs with lots of features, thus with lots of dependencies Great usability, poor evolvability Good for higher level components, not for the core of a platform A
  • 44. Component is .. Lego, Plug ?? A
  • 45. Component is .. .. a set of types that ship and evolve as a unit. A
  • 47. API Dependency Component A has an API dependency on component B, if a type in B shows in the publicly accessible API surface of a type in A. This includes: Base types and implemented interfaces Generic parameter constraints Return types and parameters of members Applied attributes Nested types A
  • 48. Implemenatin Dependency If a type in A uses a type in B in its implementation. Hard Dependencies (required to run) Soft Dependencies (optional) A
  • 49. Circular Dependency Component A depends on component B and Component B depends on component A (even indirectly). A
  • 52. WPF XML    BCL Reflection A Dependency Management
  • 53. 상황을 파악하는 좋은 방법DSM (Dependency Structure Matrix)
  • 57. 불완전한 계층구조를 가진 시스템 Circular Dependency 발생.
  • 58. 또 하나의 도구– Code Metrics
  • 59. xDepend(Ndepend, Xdepend, CDepend) NDepend - http://www.xdepend.com
  • 60. Solution is.. Create a new package. A
  • 61. circular dependency GUI Comm Analysis Protocol Modem Control Comm Error Database Message Manager A
  • 63. Use Interface. A X Y <<interface>> BY B A
  • 66. Heavy Dependency. // your API public class Tracer { MessageQueue mq = new MessageQueue(…); public void Trace(string message){ mq.Send(message); } } // your customer’s program that is hard to test Tracer tracer = new Tracer(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … } A
  • 67. Inversion of Control // your better API public abstract class TraceListener { public abstract void Trace(string message); } public class Tracer { TraceListener listener; public Tracer(TraceListener listener){ this.listener = listener; } public void Trace(string message){ listener.Trace(message); } } A
  • 68. Dependency Injection // your customer’s program that is easier to test Tracer tracer = new Tracer(new FileListener()); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … } A
  • 69. Dependency Injection Containers // customer’s program that is even easier to test Tracer tracer = container.Resolve<Tracer>(); public void ProcessOrder(Order order){ tracer.Trace(order.Id); … } Check outDI Containers (a.k.a. IoC Containers):autofac, Castle Windsor, PicoContainer.NET, Spring.NET, StructureMap, Unity, nInject and others. http://www.nInject.org A
  • 70. Packaging Principle Package Cohesion Principle REP (Release Reuse Equivalency) CCP (Common Closure Principle) CRP (Common Reuse Principle) Package Coupling Principle ADP (Acyclic Dependencies Principle) SDP (Stable Dependencies Principle) SAP (Stable Abstraction Principle) A Robert C. Martin, Principle of Package Architecture http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf
  • 71. Do balance advances with compatibility. A
  • 72. Types of “Compatibility” Backward Cross-Version Forward A
  • 74. A
  • 75. Establishing Compatibility Bar Define what’s a “breaking change” This definition depends on the objective E.g. Enable portable code between Silverlight and .NET Framework E.g. Enable cross-version portability? A
  • 77. Team Space Show and Tell Problem Space PLoP – Capable, Productive and Satisfied Patterns for Productivity http://hillside.net/plop/plop98/final_submissions/P54.pdf A
  • 78. When to Replace Existing APIs When the new technology is “10x better” Make sure you understand the impact on the ecosystem What would happen if the BCL team added a new String? What’s the migration path for code using the old API? Support Automatic Migration Tool. (VB -> VB.NET, .NET 1.0 -> .NET 2.0) Provide Code Based Migration Manual. COM+ -> WCF , ASP.NET Web Service -> WCF A
  • 79. DesignThis is where quality happens D
  • 80. Is using your framework correctly like… Running across a desert? D
  • 82. Do design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples. D
  • 84. Read File static void Main(string[] args) { StreamReadersr = File.OpenText("MyFile.txt"); string s = sr.ReadLine(); while (s != null) { s = sr.ReadLine(); Console.WriteLine(s); } } D
  • 85. Feedback (Read File) static void Main(string[] args) { foreach (string s in File.ReadAllLines("MyFiles.text")) { Console.WriteLine(s); } } D
  • 87. Framework Design Studio Assembly Exploer Project -> Add -> Assembly D Download here - http://code.msdn.microsoft.com/fds
  • 88. Framework Design Studio Assembly Review Comment D
  • 90. Framework Design StudioCompare API Versions Red is removed, Green is added, Grey means inherited. D
  • 91. Framework Design StudioExporting to Microsoft Word Tools -> Export to Document D
  • 92. Do treat simplicity as a feature. D
  • 93. KISS (Keep It Simple! Stupid!) Remove Requirements (ATAM). Reuse Existing Concepts or APIs Adjust Abstraction Level Consider framework users(experience, knowledge) Three Example D
  • 95. Specification Document: Qualities Performance Goals (XML Parser..) Baseline: What do is the best my API could do? Measure delta from the baseline Threat Models (Security ..) Threat: What is the worst that my component could do? Mitigate the threats Keep a balance between many other qualities you want your framework to have (ATAM) D
  • 96.  The POWER oFSameness D
  • 97. Read the manual?? When you pick up your rental car…. Push the seat all the way back Find an NPR station Find the exit D
  • 98. Oh, down to lock… D
  • 99. How to use a key… D
  • 100. Oh, you push the PRESS button… D
  • 101. Who actually needs this data? D
  • 102. Why you don’t read manuals ??? You know how to drive your car All cars work basically the same way Your rental car is a car Therefore, you can drive your rental car That is… The power of sameness D
  • 103. Static Analysis Tool http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis D
  • 104. DevelopmentThe bits customers get, … or not V
  • 105. Branches and Integrations- Feature Crew http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Feature%20Crews%3a%20How%20Microsoft%20Does%20It V
  • 107. Feature Complete & Quality Gates Functional Specification Developer Design Specification Test Plan Threat Model API review Architectural Review Dependency Management Static Analysis Code Coverage Testing (Unit and Integration Tests) 0 Bugs Performance V
  • 108. Do pay your debt. V
  • 109. Milestone Quality Vision statement RTM Feature complete Release Testing Planning M1 M2 Technology Preview Beta 1 Beta 2 RC1 Milestone Quality V
  • 110. Milestone Quality (MQ) Initiatives that are hard to do in regular milestones Large productivity and efficiency improvements Infrastructure changes For example, a new source control system Refactoring of fragile subsystems Internal implementation documentation Bugs backlog V
  • 111. Summary Dounderstand how organizational structure, culture, and decision making processes impact your product. Avoidpeanut-butter in Scenario Based Application. Domanage your dependencies. Dobalance advances with compatibility. Avoidduplication and overlap. Do design APIs by first writing code samples for the main scenarios and then defining the object model to support the code samples. Do treat simplicity as a feature. Domeasure, measure, and measure! Avoidintegrating unfinished features. Do pay your debt.
  • 112. Resources Krzysztof Cwalina, Brad Abrams Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries http://channel9.msdn.com/pdc2008/PC58/ http://www.gotdotnet.com/team/fxcop
  • 113. Resources Douglas C. Schmidt (PLoP Editor, POSA 2, 4 Writter) JAWS: An Application Framework for High Performance Web System http://citeseer.ist.psu.edu/81775.html (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11 (Kr) Ralph Johnson (GoF , Design Patterns) Evolving Frameworks http://st-www.cs.uiuc.edu/users/droberts/evolve.html (En) http://arload.wordpress.com/2008/09/15/evolvingframeworks/ (Kr)
  • 114. Resources Robert C. Martin Principles of Package Architecture (Design Principles and Design Patterns) http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf (En) http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=108 (Kr) For Korean People.. Load to Architect http://www.arload.net EvaCast (Online Free Lecture) http://www.evacast.net
  • 115. 최근 저서 및 곧 나올 저서..
  • 117. Question? 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. This work is licensed under Creative Commons Korea Attribution 2.0 License.