SlideShare uma empresa Scribd logo
1 de 108
Baixar para ler offline
http://www.arload.nethttp://www.arload.net
Frameworkis ..Frameworkis ..
Framework isFramework is……
Douglas C. Schmidt Says..Douglas C. Schmidt Says..
FrameworksFrameworks definedefine “semi“semi--complete” applicationcomplete” application
that embody domainthat embody domain--specific object structures and functionality.specific object structures and functionality.
App SpecificApp Specific
LogicLogic
EventEvent
LoopLoop
DATABASEDATABASE ADTsADTs
MATHMATH NETWORKINGNETWORKING
GRAPHICSGRAPHICS GUIGUI
SingletonSingleton StrategyStrategy
InvocationsInvocations
Application BlockApplication Block
Libraries is..Libraries is..
Class LibraryClass Library
ComponentComponent ArchitectureArchitecture
OO DesignOO Design
LoopLoop
SingletonSingleton StrategyStrategy
ReactorReactor AdapterAdapter
StateState Active ObjectActive Object
SelectionsSelections
Design PatternDesign Pattern
EventEvent
ReactorReactor
NETWORKINGNETWORKING
Active ObjectActive Object
GUIGUI
StateState
App SpecificApp Specific
LogicLogic
MATHMATH
InvocationsInvocations
But Framework is ..But Framework is ..
DATABASEDATABASE
SingletonSingleton
GRAPHICSGRAPHICS
AdapterAdapter
EventEvent
LoopLoop
LogicLogic
ADTsADTs
CallbacksCallbacks
ApplicationApplication FrameworkFramework
Component ArchitectureComponent Architecture
Why Do You Need Framework?Why Do You Need Framework?
Avoid Duplication Productivity
Welcome toWelcome to
My FrameworkMy FrameworkMy FrameworkMy Framework
Journey!Journey!
“Framework Engineering”, TechED 2007 Europe
“Framework Design Guidelines” , Addison Wesley
Krzysztof Cwalina
Program Manager on .NET Framework Team
5 Topics..5 Topics..
OrganizationDevelopment
Planning
Architecture
Design
DO P A V
ThemostpowerfuldesigntoolThemostpowerfuldesigntool
O
Project Management TriangleProject Management Triangle
Scope
Cost Time
O
Organization
Project Management TriangleProject Management Triangle
Organization
O
DODO understand howunderstand how organizational structure,organizational structure,
culture, and decision making processesculture, and decision making processes impaimpa
ct your product.ct your product.
O
Conway's lawConway's law
If you have 4 groups working on a compiler,
you’ll get a 4-pass compiler.
O
Organization
Structure
Software
Structure
O
Conway's Clean State ApproachConway's Clean State Approach
1
• Define the business mission• Define the business mission
2
• Learn the business process from business owners• Learn the business process from business owners
3
• Re-engineer these process to fit the mission• Re-engineer these process to fit the mission
4
• Structure the IT organization to support the reengine
ered business processes.
• Structure the IT organization to support the reengine
ered business processes.
O
Your Company Culture Is ..Your Company Culture Is ..
Voluntary ?? O
Your Company Culture Is ..Your Company Culture Is ..
Familial ??
O
Peremptory O
Organizational InfluencesOrganizational Influences
SizeofOrganizationSizeofOrganization
Simple Design
Consistency Design
Small Team
Consistency Design
Focus on 80/20 Rules
O
Organizational InfluencesOrganizational Influences
SizeofOrganizationSizeofOrganization
Powerful Design
Lack Consistency
Large Team
Lack Consistency
Remove Requirements
O
Organizational InfluencesOrganizational Influences
Organization’sCulture/BiasesOrganization’sCulture/Biases
Customer-Focused
End-2-End Scenarios
O
Organizational InfluencesOrganizational Influences
Organization’sCulture/BiasesOrganization’sCulture/Biases
Technology-Focused
Long Lasting Architecture
O
Decision Making Process is..Decision Making Process is..
O
Give this book your boss..Give this book your boss..
EnsuringwearebuildingtherightthingEnsuringwearebuildingtherightthing
P
P
P
Peanut ButterPeanut Butter SkyscrapersSkyscrapers
Focus: featuresFocus: features
Results:Results: stability,stability,
incrementalincremental
improvements, notimprovements, not
greatgreat endend--toto--endend
scenariosscenarios
Focus: scenariosFocus: scenarios
Results:Results: Excitement,Excitement,
breakthroughs, butbreakthroughs, but
beware of leavingbeware of leaving
existing customersexisting customers
behindbehind
P
MModeration (oderation (中庸中庸))
MileStone =Scenarios+FeatureMileStone =Scenarios+Feature
Planning M1 M2
Release
Testing
Feature completeVision statement RTM
Planning M1 M2 Testing
Technology Preview Beta 1 Beta 2 RC1
P
EnsuringthelongtermhealthoftheframeworkEnsuringthelongtermhealthoftheframework
A
Right Way??Right Way??
CChoose right types.hoose right types.
A
Taxonomy ofTaxonomy of TypesTypes
LibrariesLibraries,Primitives,Abstractions,Primitives,Abstractions
A
PrimitivesPrimitives
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
Definition:
Libraries are types that are not passed between com
ponents
Examples
EventLog, Debug,
LibrariesLibraries
EventLog, Debug,
Easy to Evolve
Leave old in, add new one
Beware of duplication!
A
AbstractionsAbstractions
Definition:
Abstractions are interfaces or classes with unsealed member
s that are passed between components.
Examples
Stream, IComponent
Hard to EvolveHard to Evolve
Unfortunately, pressure to evolve
A
Primitive Oriented DesignPrimitive Oriented Design
A.K.A. “Handle based design” (functional)
Great evolvability, poor usability (sometimes)
Low level stable primitives + high level reusable components with limited dep
endencies other than to the primitives
E.g. Type.GetType(object) – works, but not as convenient as Object.GetType
A
for primitive..for primitive..
C#3.0NewFeatureC#3.0NewFeature
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 DesignComponent 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 platformGood for higher level components, not for the core of a platform
A
A
DODO Manage Dependencies..Manage Dependencies..
A
Component is ..
A
Lego, Plug ??
A
.. a set of types that ship and evolve as a unit.
API
A
Dependency
Implement
ation
Circular
APIDependencyAPIDependency
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
ImplemenatinDependencyImplemenatinDependency
If a type in A uses a type in B in its implementation.
Hard Dependencies (required to run)
Soft Dependencies (optional)
A
CircularDependencyCircularDependency
Component A depends on component B and
Component B depends on component A (even indirectly).
A
A
Solution is Layering..Solution is Layering..
A
xDepend (NxDepend (NDDepend)epend)
NDepend - http://www.ndepend.com
WPFWPF XMLXML
A
BCLBCL ReflectionReflection
Createa newpackage.Createa newpackage.
A
GUIGUI
CommComm
AnalysisAnalysis
ModemModem
DDatabaseatabase
circulardependencycirculardependency
A
ProtocolProtocol
ModemModem
ControlControl
CommComm
ErrorError
DDatabaseatabase
MessageMessage
ManagerManager
AA XX
IndirectcirculardependencyIndirectcirculardependency
AA
BB
XX
YY
A
AA XX
UseInterface.UseInterface.
AA
BB
XX
YY
A
<<interface>><<interface>>
BYBY
Heavy Depedency..Heavy Depedency..
A
A
Heavy Dependency.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
Inversionof ControlInversionof 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 InjectionDependency 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
// customer’s program that is even easier to test
Tracer tracer = container.Resolve<Tracer>();
public void ProcessOrder(Order order){
tracer.Trace(order.Id);
…
}
Check out DI Containers (a.k.a. IoC Containers): autofac,
Castle Windsor, PicoContainer.NET, Spring.NET,
StructureMap, Unity, nInject and others.
http://www.nInject.org
A
PackagingPrinciplePackagingPrinciple
Package Cohesion Principle
REP (Release Reuse Equivalency)
CCP (Common Closure Principle)
CRP (Common Reuse Principle)
Package Coupling PrinciplePackage Coupling Principle
ADP (Acyclic Dependencies Principle)
SDP (Stable Dependencies Principle)
SAP (Stable Abstraction Principle)
ARobert 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”Types of “Compatibility”
BackwardBackward
A
CrossCross--VersionVersion
ForwardForward
A
CrossCross--RedistRedist..
A
Define what’s a “breaking change”
This definition depends on the objective
E.g. Enable portable code between Silverlight and .
NET FrameworkNET Framework
E.g. Enable cross-version portability?
A
AVOID duplication and overlap.
A
TeamTeam SpaceSpace Show and TellShow and Tell
A
PLoP – Capable, Productive and Satisfied Patterns for Productivity
http://hillside.net/plop/plop98/final_submissions/P54.pdf
ProblemProblem SpaceSpace
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
KC1
슬라이드 70
KC1 This slide needs major work
Krzysztof Cwalina, 2007-10-19
ThisiswherequalityhappensThisiswherequalityhappens
D
Is using your framework correctly like…Is using your framework correctly like…
Running across a desert?Running across a desert? D
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 SamplesCode Samples
D
Read FileRead File
static void Main(string[] args)
{
StreamReader sr = File.OpenText("MyFile.txt");
string s = sr.ReadLine();
while (s != null)
{
s = sr.ReadLine();
Console.WriteLine(s);
}
}
D
static void Main(string[] args)
{
foreach (string s in File.ReadAllLines("MyFiles.text"))
{
Feedback (Read File)Feedback (Read File)
{
Console.WriteLine(s);
}
}
D
Object Model ListingObject Model Listing
D
Framework Design StudioFramework Design Studio
Assembly ExploerAssembly Exploer
Project -> Add -> Assembly
Download here - http://code.msdn.microsoft.com/fds
D
Framework Design StudioFramework Design Studio
Assembly ReviewCommentAssembly ReviewComment
D
Framework Design StudioFramework Design Studio
CompareAPIVersionsCompareAPIVersions
D
Framework Design StudioFramework Design Studio
CompareAPIVersionsCompareAPIVersions
Red is removed,
Green is added,
Grey means inherited.Grey means inherited.
D
Framework Design StudioFramework Design Studio
Exporting toMicrosoft WordExporting toMicrosoft Word
Tools -> Export to Document D
DO treat simplicity as a feature.
D
Remove Requirements (ATAM).
Reuse Existing Concepts or APIs
Adjust Abstraction Level
Consider framework users(experience, knowledge)
Three Example
D
DO measure, measure, and measure!
D
Specification Document: QualitiesSpecification 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 couldThreat: 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 OF SAMENESS
D
When you pick up your rental car….When you pick up your rental car….
Push the seat all the way back
Find an NPR station
Find the exit
Read the manual??Read the manual??
D
Oh, down to lock…Oh, down to lock…
D
How to use a key…How to use a key…
D
Oh, youOh, you pushpush the PRESS button…the PRESS button…
D
Who actuallyWho actually
needsneeds this data?this data?
D
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 carTherefore, you can drive your rental car
That is…
D
http://blogs.msdn.com/fxcophttp://blogs.msdn.com/fxcop D
Thebitscustomersget,…ornotThebitscustomersget,…ornot
V
Branches and IntegrationsBranches and Integrations
--FeatureCrewFeatureCrew
MainMain
PU-stagingPU-staging PU-stagingPU-staging PU-stagingPU-staging
V
PU-staging
Branch
PU-staging
Branch
Feature
Branch
Feature
Branch
Feature
Branch
Feature
Branch
PU-staging
Branch
PU-staging
Branch
PU-staging
Branch
PU-staging
Branch
http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Feature%20Crews%3a%
20How%20Microsoft%20Does%20It
AVOID integrating unfinished features.
V
Functional Specification
Developer Design Specification
Test Plan
Threat Model
API review
Architectural ReviewArchitectural Review
Dependency Management
Static Analysis
Code Coverage
Testing (Unit and Integration Tests)
0 Bugs
Performance
V
DO pay your debt.
V
Planning M1 M2
Release
Testing
Feature completeVision statement RTM
Technology Preview Beta 1 Beta 2 RC1
Milestone Quality V
Milestone Quality (MQ)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 subsystemsRefactoring of fragile subsystems
Internal implementation documentation
Bugs backlog
V
DO understand how organizational structure, culture, and decision making proc
esses impact your product.
AVOID peanut-butter in Scenario Based Application.
DO manage your dependencies.
DO balance advances with compatibility.
AVOID duplication and overlap.
DO design APIs by first writing code samples for the main scenarios and then dDO design APIs by first writing code samples for the main scenarios and then d
efining the object model to support the code samples.
DO treat simplicity as a feature.
DO measure, measure, and measure!
AVOID integrating unfinished features.
DO pay your debt.
Krzysztof Cwalina, Brad AbramsKrzysztof 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
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)
Robert C. Martin
Principles of Package Architecture (Design Principles and Design Patterns)
http://www.objectmentor.com/resources/articles/Principles_and_Pattern
s.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
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0
대한민국 라이센스에 따라 이용하실 수 있습니다.
This work is licensed under Creative Commons Korea Attribution 2.0 License.

Mais conteúdo relacionado

Mais procurados

Introducing Django
Introducing DjangoIntroducing Django
Introducing Djangozerok
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습DoHyun Jung
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemRafael Winterhalter
 
What's Expected in Java 7
What's Expected in Java 7What's Expected in Java 7
What's Expected in Java 7Gal Marder
 
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)Theo Jungeblut
 
Java 7 - What's New?
Java 7 - What's New?Java 7 - What's New?
Java 7 - What's New?Kobib9
 
Monitoring distributed (micro-)services
Monitoring distributed (micro-)servicesMonitoring distributed (micro-)services
Monitoring distributed (micro-)servicesRafael Winterhalter
 
Java Cheat Sheet
Java Cheat SheetJava Cheat Sheet
Java Cheat SheetGlowTouch
 
Getting started with Java 9 modules
Getting started with Java 9 modulesGetting started with Java 9 modules
Getting started with Java 9 modulesRafael Winterhalter
 
Real world dependency injection - DPC10
Real world dependency injection - DPC10Real world dependency injection - DPC10
Real world dependency injection - DPC10Stephan Hochdörfer
 
Static Analysis and AST Transformations
Static Analysis and AST TransformationsStatic Analysis and AST Transformations
Static Analysis and AST TransformationsHamletDRC
 
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術Seitaro Yuuki
 
Static Analysis in IDEA
Static Analysis in IDEAStatic Analysis in IDEA
Static Analysis in IDEAHamletDRC
 
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)Theo Jungeblut
 
Adapter 2pp
Adapter 2ppAdapter 2pp
Adapter 2pprajjani
 
Java object oriented programming - OOPS
Java object oriented programming - OOPSJava object oriented programming - OOPS
Java object oriented programming - OOPSrithustutorials
 

Mais procurados (20)

Introducing Django
Introducing DjangoIntroducing Django
Introducing Django
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
모던자바의 역습
모던자바의 역습모던자바의 역습
모던자바의 역습
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystem
 
What's Expected in Java 7
What's Expected in Java 7What's Expected in Java 7
What's Expected in Java 7
 
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)
Lego for Software Engineers at Silicon Valley Code Camp 2011 (2010-10-10)
 
Java 7 - What's New?
Java 7 - What's New?Java 7 - What's New?
Java 7 - What's New?
 
Spring
SpringSpring
Spring
 
Monitoring distributed (micro-)services
Monitoring distributed (micro-)servicesMonitoring distributed (micro-)services
Monitoring distributed (micro-)services
 
Java Cheat Sheet
Java Cheat SheetJava Cheat Sheet
Java Cheat Sheet
 
Getting started with Java 9 modules
Getting started with Java 9 modulesGetting started with Java 9 modules
Getting started with Java 9 modules
 
Real world dependency injection - DPC10
Real world dependency injection - DPC10Real world dependency injection - DPC10
Real world dependency injection - DPC10
 
Epoxy 介紹
Epoxy 介紹Epoxy 介紹
Epoxy 介紹
 
Static Analysis and AST Transformations
Static Analysis and AST TransformationsStatic Analysis and AST Transformations
Static Analysis and AST Transformations
 
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
ScalaMatsuri 2016 ドワンゴアカウントシステムを支えるScala技術
 
Static Analysis in IDEA
Static Analysis in IDEAStatic Analysis in IDEA
Static Analysis in IDEA
 
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)
Lego For Engineers - Dependency Injection for LIDNUG (2011-06-03)
 
Adapter 2pp
Adapter 2ppAdapter 2pp
Adapter 2pp
 
Introduction To Web Beans
Introduction To Web BeansIntroduction To Web Beans
Introduction To Web Beans
 
Java object oriented programming - OOPS
Java object oriented programming - OOPSJava object oriented programming - OOPS
Java object oriented programming - OOPS
 

Destaque

funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing FrameworkYoungSu Son
 
모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전YoungSu Son
 
04. fearless change
04. fearless change 04. fearless change
04. fearless change YoungSu Son
 
Fearless Change
Fearless Change Fearless Change
Fearless Change YoungSu Son
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1YoungSu Son
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineeringYoungSu Son
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴 YoungSu Son
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법 YoungSu Son
 

Destaque (9)

miss_pattern_v2
miss_pattern_v2miss_pattern_v2
miss_pattern_v2
 
funf - Android Sensing Framework
funf - Android Sensing Frameworkfunf - Android Sensing Framework
funf - Android Sensing Framework
 
모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전모바일 트랜드 2013 - 간단 버전
모바일 트랜드 2013 - 간단 버전
 
04. fearless change
04. fearless change 04. fearless change
04. fearless change
 
Fearless Change
Fearless Change Fearless Change
Fearless Change
 
Open source engineering - 0.1
Open source engineering - 0.1Open source engineering - 0.1
Open source engineering - 0.1
 
Open source engineering
Open source engineeringOpen source engineering
Open source engineering
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 

Semelhante a Framework Engineering Revisited

Framework Engineering 2.1
Framework Engineering 2.1Framework Engineering 2.1
Framework Engineering 2.1YoungSu Son
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework EngineeringYoungSu Son
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_FinalYoungSu Son
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011YoungSu Son
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2Hammad Rajjoub
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2Hammad Rajjoub
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
React Lifecycle and Reconciliation
React Lifecycle and ReconciliationReact Lifecycle and Reconciliation
React Lifecycle and ReconciliationZhihao Li
 
Boost your App with Gatling
Boost your App with GatlingBoost your App with Gatling
Boost your App with GatlingKnoldus Inc.
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklChristoph Pickl
 
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...Spark Summit
 
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...Chris Richardson
 
Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard IntroductionAnthony Chen
 
Proteus - android layout engine
Proteus - android layout engineProteus - android layout engine
Proteus - android layout engineKiran Kumar
 
Moving from AS3 to Flex - advantages, hazards, traps
Moving from AS3 to Flex - advantages, hazards, trapsMoving from AS3 to Flex - advantages, hazards, traps
Moving from AS3 to Flex - advantages, hazards, trapsFlorian Weil
 
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Christian Catalan
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkRed Hat Developers
 

Semelhante a Framework Engineering Revisited (20)

Framework Engineering 2.1
Framework Engineering 2.1Framework Engineering 2.1
Framework Engineering 2.1
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework Engineering
 
Framework Engineering_Final
Framework Engineering_FinalFramework Engineering_Final
Framework Engineering_Final
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2
 
C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2C:\Fakepath\Combating Software Entropy 2
C:\Fakepath\Combating Software Entropy 2
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
React Lifecycle and Reconciliation
React Lifecycle and ReconciliationReact Lifecycle and Reconciliation
React Lifecycle and Reconciliation
 
Boost your App with Gatling
Boost your App with GatlingBoost your App with Gatling
Boost your App with Gatling
 
What is new in J2SE 5
What is new in J2SE 5What is new in J2SE 5
What is new in J2SE 5
 
Creational Design Patterns
Creational Design PatternsCreational Design Patterns
Creational Design Patterns
 
JSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph PicklJSUG - Filthy Flex by Christoph Pickl
JSUG - Filthy Flex by Christoph Pickl
 
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
Optimizing Spark Deployments for Containers: Isolation, Safety, and Performan...
 
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...
CommunityOneEast 09 - Dynamic Languages: the next big thing for the JVM or an...
 
Dropwizard Introduction
Dropwizard IntroductionDropwizard Introduction
Dropwizard Introduction
 
Introducing spring
Introducing springIntroducing spring
Introducing spring
 
Proteus - android layout engine
Proteus - android layout engineProteus - android layout engine
Proteus - android layout engine
 
Moving from AS3 to Flex - advantages, hazards, traps
Moving from AS3 to Flex - advantages, hazards, trapsMoving from AS3 to Flex - advantages, hazards, traps
Moving from AS3 to Flex - advantages, hazards, traps
 
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
 

Mais 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
 
[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
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 

Mais 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의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
 
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
 
[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 다루기)
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 

Framework Engineering Revisited