SlideShare una empresa de Scribd logo
1 de 77
Descargar para leer sin conexión
Son YoungSu
                  indigoguru@gmail.com

                           Microsoft MVP
                           EvaCast Leader
                Devpia Architecture Sysop
Load to Architect (http://www.arload.net)
Frameworks define “semi-complete” application
                  “semi-
that embody domain-specific object structures and functionality.
            domain-
Application Block
                                                                            Active Object                  State
                          DATABASE           ADTs
                                                                       NETWORKING                 GUI
                                                        MATH
App SpecificInvocations   MATH        NETWORKING
                                                                                                     Reactor
Logic
                          GRAPHICS            GUI                   App Specific
                                                      Invocations
 Event                                                              Logic                          Event
 Loop                                                                              Callbacks       Loop
                          Singleton       Strategy
             Selections
                          Reactor       Adapter         ADTs
OO Design                                                                    Singleton               Adapter
                          State       Active Object
                                                                       DATABASE                GRAPHICS
                            Design Pattern




                   Class Library                                     Application Framework
               Component Architecture                               Component Architecture
Avoid Duplication   Productivity
Do you wanna make
 good framework?
Motivation

Organization
Architecture
Planning
Design
Development

Resources
“Framework Engineering”, TechED 2007 Europe
“Framework Design Guidelines” , Addison Wesley

Krzysztof Cwalina
Program Manager on .NET Framework Team
Organization



                        O               Planning
Development     V               P
                    Your APIs

                    D       A


                                Architecture
       Design
The most powerful design tool




                                O
Scope




Cost           Time
Scope   Time




Cost    Organization
 DO understand how organizational structure,
  culture, and decision making processes impa
  ct your product.




                                           O
If you have 4 groups working on a compiler,
you’ll get a 4-pass compiler.
If you have four groups working on a compiler,
you’ll get a 4-pass compiler.




        Organization          Software
         Structure            Structure
• Define the business mission
1


    • Learn the business process from business owners
2


    • Re-engineer these process to fit the mission
3

    • Structure the IT organization to support the reengine
4     ered business processes.
Voluntary
Familial
Peremptory
Simple Design

             Consistency Design


             Focus on 80/20 Rules

Small Team
Powerful Design

              Lack Consistency


             Remove Requirements

Large Team
Customer-Focused



End-2-End Scenarios
Technology-Focused



Long Lasting Architecture
Individuals Empowered -> Time to Market

Hierarchy -> Interoperability and Integration

Consensus -> Team Building
Ensuring we are building the right thing




                                           P
Peanut Butter          Skyscrapers




Focus: features       Focus: scenarios
Results: stability,   Results: Excitement,
incremental           breakthroughs, but
improvements, not     beware of leaving
great end-to-end
      end-to-         existing customers
                                             P
scenarios             behind
Vision statement             Feature complete          RTM
                                                  Release
Planning            M1            M2              Testing




                 Technology Preview Beta 1     Beta 2       RC1
Ensuring the long term health of the framework




                                                 A
 DO manage your dependencies.




                                 A
A Component is a set of types that ship and evolve
as a unit.
Componentization is a process of organizing types into components, w
ith explicitly designed and controlled dependencies between compon
ents.
ents
NOTE: Componentization is different from assembly factoring (i.e. an a
ssembly might have more than one component)




                                                                   A
API Dependency: Component A has an API dependency on compon
ent B, if a type in B shows in the publicly accessible (public or prote
cted) 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
Implementation Dependency: If a type in A uses a type in B in its im
plementation.
    Hard Dependencies (required to run)
    Soft Dependencies (optional)
Circular Dependency occurs when component A depends on comp
onent B and component B depends on component A (even indirect
ly).
    Note: Two (or more) components with a circular API dependencies can b
    e considered a single component for all practical purposes.
                                                                       A
Layering is a process of organizing components in layers and enforcing dependency
rules between components in these layers.




                                                                                    A
   Types in a component can freely depend on each other
   Cross-component dependencies must be carefully controlled
       A component can freely take dependencies on components in a lower layer
       A component must not have hard dependencies on components in higher layers.
       A component should avoid soft dependencies on components in higher layers.
       Dependencies between components of the same layer must be carefully managed. [NOT
        E: we have an approval process for these]
   In general it’s good to minimize dependencies, if it does not create to much duplic
    ation (bloat)




                                                                                      A
NDepend - http://www.ndepend.com
Primitives
Abstractions
Reusable Components
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
Interfaces, abstract classes, some concrete classes wi
th extensive virtual surface.
Similar to Primitives (show in APIs), but usually have
more policy (though less than libraries)
The hardest types to design right
     With the exception on a few historically well understo
     od abstractions (lists, streams, etc.), abstractions with
     more than 2-3 members are rarely successful.
Difficult to evolve
Glue between parts of the framework
     Through polymorphism
Very useful for decoupling components
Examples: Stream, IEnumerable<T>



                                                                 A
Perform operations on primitives and abstractions (or the system)
Almost never passed around
Change often as frameworks evolve
     XmlDocument (Fx 1.0 – XML DOM)
     XPathDocument (Fx 2.0 - XPath)
     XDocument (Fx 3.5 – Linq to XML)
Relatively easy to evolve (if designed and used properly); they can be simply
replaced.
Examples: XmlDocument, EventLog, SerialPort




                                                                          A
Rich APIs with lots of features, thus with lots of dependencies
Great usability, poor evolvability
E.g. Object.GetType() – Every object has very easy access to its type, but also
every object depends on Reflection
Good for higher level components, not for the core of a platform
NOTE: “Component” is an overloaded term. In this context it does not have a
nything to do with “componentization.” Unfortunately, COD is already an esta
blished term.




                                                                           A
A.K.A. “Handle based design” (functional)
Great evolvability, poor usability (sometimes)
Low level sable 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
Members with “heavy” dependencies can be extension metho
  ds for primitives in a separate component.
  This is essentially functional programming
// low level assembly with no dependency on globalization
namespace System {
    public struct Decimal {
        public string ToString(); // culture independent
    }
}

// higher level assembly
namespace System {
    public static class DecimalFormatter {
        // decimal point character is culture sensitive
        public static string ToString(this Decimal d, string format);
    }
}

Note: Same namespace makes the API easy to use                          A
 DO balance advances with compatibility.




                                            A
Cross-Version Compatibility: code written for a version of a redist wor
ks on a different version of the same redist.
Cross-Redist Compatibility: code written for a redist works on a differ
ent redist.
Backward Compatibility: code written for a version of a redist works o
n a newer version of the same redist.
Forward Compatibility: code written for a version of a redist works on
a previous version of the same redist.




                                                                    A
Binary Compatibility: a binary runs on a different
version or a different redist than what it was buil
d for without recompilation.
Source Compatibility: source code compiling on
a version of a redist can be recompiled without c
hanges on a different version or a different redist.
API Compatibility: Stronger than source. Weaker
than binary. Source compatibility allows for some
changes in APIs (e.g. covariant changes to input p
arameters). API Compatibility does not.
                                                   A
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?
For example, Silverlight interfaces cannot have l
ess members than .NET interfaces, but concrete
types can.


                                                    A
 AVOID duplication and overlap.




                                   A
 AVOID duplication and overlap.




      Problem Space                       Show and Tell

PLoP – Capable, Productive and Satisfied Patterns for Productivity
                                                                     A
       http://hillside.net/plop/plop98/final_submissions/P54.pdf
When the new technology is “10x better”
Make sure you understand the impact on the ec
osystem
   What would happen if the BCL team added a new S
   tring?
What’s the migration path for code using the ol
d API?



                                                A
This is where quality happens




                                D
 DO design APIs by first writing code samples f
 or the main scenarios and then defining the o
 bject model to support the code samples.




                                               D
D
static void Main(string[] args)
 {
        StreamReader sr = File.OpenText(quot;MyFile.txtquot;);
        string s = sr.ReadLine();

      while (s != null)
      {
        s = sr.ReadLine();
        Console.WriteLine(s);
      }
}
static void Main(string[] args)
{
   foreach (string s in File.ReadAllLines(quot;MyFiles.textquot;))
  {
          Console.WriteLine(s);
   }
}
D
Project -> Add -> Assembly

     Download here - http://code.msdn.microsoft.com/fds
Red is removed,
Green is added,
Grey means inherited.
Tools -> Export to Document
 DO treat simplicity as a feature.




                                      D
Remove Requirements
Reuse Existing Concepts or APIs
Adjust Abstraction Level

Evolving Framework (Three Example)




                                     D
 DO measure, measure, and measure!




                                      D
Performance Goals
   Baseline: What do is the best my API could do?
   Measure delta from the baseline
Threat Models
   Threat: What is the worst that my component co
   uld do?
   Mitigate the threats
Same for many other qualities you want your f
ramework to have

                                                    D
The bits customers get, … or not




                                   V
Main




      PU-staging         PU-staging   PU-staging
       branch             branch       branch




Feature        Feature
branch         branch




                                                   V
 AVOID integrating unfinished features.




                                           V
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
Vision statement                  Feature complete          RTM
                                                       Release
Planning            M1               M2                Testing




                 Technology Preview Beta 1          Beta 2       RC1



                         Milestone Quality
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
 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 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.
Framework Design Guidelines:
Conventions, Idioms, and Patterns for Reusable .NET
Libraries
Krzysztof Cwalina, Brad Abrams




              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)

Más contenido relacionado

La actualidad más candente

What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009Stefane Fermigier
 
IBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt IntegrationIBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt Integrationgjuljo
 
Framework Engineering 2.1
Framework Engineering 2.1Framework Engineering 2.1
Framework Engineering 2.1YoungSu Son
 
Model driven development using smart use cases and domain driven design
Model driven development using smart use cases and domain driven designModel driven development using smart use cases and domain driven design
Model driven development using smart use cases and domain driven designSander Hoogendoorn
 
Implicit Middleware
Implicit MiddlewareImplicit Middleware
Implicit MiddlewareTill Riedel
 
An introduction to smart use cases
An introduction to smart use casesAn introduction to smart use cases
An introduction to smart use casesSander Hoogendoorn
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customizationgjuljo
 
Agile Testing Practices
Agile Testing PracticesAgile Testing Practices
Agile Testing PracticesPaul King
 
Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Saikrishna Basetti
 
Research platform architecture
Research platform architectureResearch platform architecture
Research platform architecturePierre Menard
 
LUXproject functionality overview R11.8
LUXproject functionality overview R11.8LUXproject functionality overview R11.8
LUXproject functionality overview R11.8Alexander Zagvozdin
 
Smooth transition to Eclipse in practice
Smooth transition to Eclipse in practiceSmooth transition to Eclipse in practice
Smooth transition to Eclipse in practiceguest301ea
 
Rhapsody Eclipse
Rhapsody EclipseRhapsody Eclipse
Rhapsody EclipseBill Duncan
 
9. oo languages
9. oo languages9. oo languages
9. oo languagesAPU
 
Cg2012 niet-geanimeerd
Cg2012 niet-geanimeerdCg2012 niet-geanimeerd
Cg2012 niet-geanimeerdEric Malotaux
 
Titanium Mobile: flexibility vs. performance
Titanium Mobile: flexibility vs. performanceTitanium Mobile: flexibility vs. performance
Titanium Mobile: flexibility vs. performanceomorandi
 
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...Remedy IT
 
"Right Availability in RAC environment"
"Right Availability in RAC environment""Right Availability in RAC environment"
"Right Availability in RAC environment"Transfer Solutions
 

La actualidad más candente (20)

What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009
 
IBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt IntegrationIBM Rational Rhapsody and Qt Integration
IBM Rational Rhapsody and Qt Integration
 
Framework Engineering 2.1
Framework Engineering 2.1Framework Engineering 2.1
Framework Engineering 2.1
 
Model driven development using smart use cases and domain driven design
Model driven development using smart use cases and domain driven designModel driven development using smart use cases and domain driven design
Model driven development using smart use cases and domain driven design
 
Implicit Middleware
Implicit MiddlewareImplicit Middleware
Implicit Middleware
 
An introduction to smart use cases
An introduction to smart use casesAn introduction to smart use cases
An introduction to smart use cases
 
IBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation CustomizationIBM Rhapsody Code Generation Customization
IBM Rhapsody Code Generation Customization
 
Agile Testing Practices
Agile Testing PracticesAgile Testing Practices
Agile Testing Practices
 
Application Migration & Enhancement
Application Migration & EnhancementApplication Migration & Enhancement
Application Migration & Enhancement
 
Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168Portlet Programming Using Jsr 168
Portlet Programming Using Jsr 168
 
Research platform architecture
Research platform architectureResearch platform architecture
Research platform architecture
 
LUXproject functionality overview R11.8
LUXproject functionality overview R11.8LUXproject functionality overview R11.8
LUXproject functionality overview R11.8
 
Smooth transition to Eclipse in practice
Smooth transition to Eclipse in practiceSmooth transition to Eclipse in practice
Smooth transition to Eclipse in practice
 
Se
SeSe
Se
 
Rhapsody Eclipse
Rhapsody EclipseRhapsody Eclipse
Rhapsody Eclipse
 
9. oo languages
9. oo languages9. oo languages
9. oo languages
 
Cg2012 niet-geanimeerd
Cg2012 niet-geanimeerdCg2012 niet-geanimeerd
Cg2012 niet-geanimeerd
 
Titanium Mobile: flexibility vs. performance
Titanium Mobile: flexibility vs. performanceTitanium Mobile: flexibility vs. performance
Titanium Mobile: flexibility vs. performance
 
AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...AXCIOMA, the internals, the component framework for distributed, real-time, a...
AXCIOMA, the internals, the component framework for distributed, real-time, a...
 
"Right Availability in RAC environment"
"Right Availability in RAC environment""Right Availability in RAC environment"
"Right Availability in RAC environment"
 

Similar a Microsoft MVP Son YoungSu Shares Expertise on Framework Architecture and Design

TheSpringFramework
TheSpringFrameworkTheSpringFramework
TheSpringFrameworkShankar Nair
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011YoungSu Son
 
Framework Engineering Revisited
Framework Engineering RevisitedFramework Engineering Revisited
Framework Engineering RevisitedYoungSu Son
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"GlobalLogic Ukraine
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arpGary Pedretti
 
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFrançois Le Droff
 
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisExploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisIRJET Journal
 
Agile integration: Decomposing the monolith
Agile integration: Decomposing the monolithAgile integration: Decomposing the monolith
Agile integration: Decomposing the monolithJudy Breedlove
 
ReactJs Training in Hyderabad | ReactJS Training
ReactJs Training in Hyderabad  | ReactJS TrainingReactJs Training in Hyderabad  | ReactJS Training
ReactJs Training in Hyderabad | ReactJS Trainingeshwarvisualpath
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...Fwdays
 
J2EE Batch Processing
J2EE Batch ProcessingJ2EE Batch Processing
J2EE Batch ProcessingChris Adkin
 
DICE & Cloudify – Quality Big Data Made Easy
DICE & Cloudify – Quality Big Data Made EasyDICE & Cloudify – Quality Big Data Made Easy
DICE & Cloudify – Quality Big Data Made EasyCloudify Community
 
Collab net overview_june 30 slide show
Collab net overview_june 30 slide showCollab net overview_june 30 slide show
Collab net overview_june 30 slide showsfelsenthal
 
From Model to Implementation II
From Model to Implementation IIFrom Model to Implementation II
From Model to Implementation IIReem Alattas
 
Reference Architecture
Reference ArchitectureReference Architecture
Reference ArchitectureJohan Eltes
 
java web framework standard.20180412
java web framework standard.20180412java web framework standard.20180412
java web framework standard.20180412FirmansyahIrma1
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstElements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstEnea Gabriel
 

Similar a Microsoft MVP Son YoungSu Shares Expertise on Framework Architecture and Design (20)

TheSpringFramework
TheSpringFrameworkTheSpringFramework
TheSpringFramework
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
Framework Engineering Revisited
Framework Engineering RevisitedFramework Engineering Revisited
Framework Engineering Revisited
 
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
Java TechTalk "Spring boot made life easier with Kubernetes and Microservices"
 
Onion Architecture with S#arp
Onion Architecture with S#arpOnion Architecture with S#arp
Onion Architecture with S#arp
 
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog CcFlex For Java Architects Ledroff Breizh Jug V Blog Cc
Flex For Java Architects Ledroff Breizh Jug V Blog Cc
 
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative AnalysisExploring MERN Stack and Tech Stacks: A Comparative Analysis
Exploring MERN Stack and Tech Stacks: A Comparative Analysis
 
Agile integration: Decomposing the monolith
Agile integration: Decomposing the monolithAgile integration: Decomposing the monolith
Agile integration: Decomposing the monolith
 
ReactJs Training in Hyderabad | ReactJS Training
ReactJs Training in Hyderabad  | ReactJS TrainingReactJs Training in Hyderabad  | ReactJS Training
ReactJs Training in Hyderabad | ReactJS Training
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
J2EE Batch Processing
J2EE Batch ProcessingJ2EE Batch Processing
J2EE Batch Processing
 
DICE & Cloudify – Quality Big Data Made Easy
DICE & Cloudify – Quality Big Data Made EasyDICE & Cloudify – Quality Big Data Made Easy
DICE & Cloudify – Quality Big Data Made Easy
 
Collab net overview_june 30 slide show
Collab net overview_june 30 slide showCollab net overview_june 30 slide show
Collab net overview_june 30 slide show
 
From Model to Implementation II
From Model to Implementation IIFrom Model to Implementation II
From Model to Implementation II
 
Reference Architecture
Reference ArchitectureReference Architecture
Reference Architecture
 
java web framework standard.20180412
java web framework standard.20180412java web framework standard.20180412
java web framework standard.20180412
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Objective-C
Objective-CObjective-C
Objective-C
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstElements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code First
 

Más de YoungSu Son

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

Más de YoungSu Son (20)

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

Último

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Último (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

Microsoft MVP Son YoungSu Shares Expertise on Framework Architecture and Design

  • 1. Son YoungSu indigoguru@gmail.com Microsoft MVP EvaCast Leader Devpia Architecture Sysop Load to Architect (http://www.arload.net)
  • 2.
  • 3. Frameworks define “semi-complete” application “semi- that embody domain-specific object structures and functionality. domain-
  • 4. Application Block Active Object State DATABASE ADTs NETWORKING GUI MATH App SpecificInvocations MATH NETWORKING Reactor Logic GRAPHICS GUI App Specific Invocations Event Logic Event Loop Callbacks Loop Singleton Strategy Selections Reactor Adapter ADTs OO Design Singleton Adapter State Active Object DATABASE GRAPHICS Design Pattern Class Library Application Framework Component Architecture Component Architecture
  • 5. Avoid Duplication Productivity
  • 6. Do you wanna make good framework?
  • 7.
  • 9. “Framework Engineering”, TechED 2007 Europe “Framework Design Guidelines” , Addison Wesley Krzysztof Cwalina Program Manager on .NET Framework Team
  • 10. Organization O Planning Development V P Your APIs D A Architecture Design
  • 11. The most powerful design tool O
  • 12. Scope Cost Time
  • 13. Scope Time Cost Organization
  • 14.  DO understand how organizational structure, culture, and decision making processes impa ct your product. O
  • 15. If you have 4 groups working on a compiler, you’ll get a 4-pass compiler.
  • 16. If you have four groups working on a compiler, you’ll get a 4-pass compiler. Organization Software Structure Structure
  • 17. • Define the business mission 1 • Learn the business process from business owners 2 • Re-engineer these process to fit the mission 3 • Structure the IT organization to support the reengine 4 ered business processes.
  • 21. Simple Design Consistency Design Focus on 80/20 Rules Small Team
  • 22. Powerful Design Lack Consistency Remove Requirements Large Team
  • 25. Individuals Empowered -> Time to Market Hierarchy -> Interoperability and Integration Consensus -> Team Building
  • 26. Ensuring we are building the right thing P
  • 27.
  • 28.
  • 29. Peanut Butter Skyscrapers Focus: features Focus: scenarios Results: stability, Results: Excitement, incremental breakthroughs, but improvements, not beware of leaving great end-to-end end-to- existing customers P scenarios behind
  • 30. Vision statement Feature complete RTM Release Planning M1 M2 Testing Technology Preview Beta 1 Beta 2 RC1
  • 31. Ensuring the long term health of the framework A
  • 32.  DO manage your dependencies. A
  • 33. A Component is a set of types that ship and evolve as a unit. Componentization is a process of organizing types into components, w ith explicitly designed and controlled dependencies between compon ents. ents NOTE: Componentization is different from assembly factoring (i.e. an a ssembly might have more than one component) A
  • 34. API Dependency: Component A has an API dependency on compon ent B, if a type in B shows in the publicly accessible (public or prote cted) 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 Implementation Dependency: If a type in A uses a type in B in its im plementation. Hard Dependencies (required to run) Soft Dependencies (optional) Circular Dependency occurs when component A depends on comp onent B and component B depends on component A (even indirect ly). Note: Two (or more) components with a circular API dependencies can b e considered a single component for all practical purposes. A
  • 35. Layering is a process of organizing components in layers and enforcing dependency rules between components in these layers. A
  • 36. Types in a component can freely depend on each other  Cross-component dependencies must be carefully controlled  A component can freely take dependencies on components in a lower layer  A component must not have hard dependencies on components in higher layers.  A component should avoid soft dependencies on components in higher layers.  Dependencies between components of the same layer must be carefully managed. [NOT E: we have an approval process for these]  In general it’s good to minimize dependencies, if it does not create to much duplic ation (bloat) A
  • 38.
  • 40. 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
  • 41. Interfaces, abstract classes, some concrete classes wi th extensive virtual surface. Similar to Primitives (show in APIs), but usually have more policy (though less than libraries) The hardest types to design right With the exception on a few historically well understo od abstractions (lists, streams, etc.), abstractions with more than 2-3 members are rarely successful. Difficult to evolve Glue between parts of the framework Through polymorphism Very useful for decoupling components Examples: Stream, IEnumerable<T> A
  • 42. Perform operations on primitives and abstractions (or the system) Almost never passed around Change often as frameworks evolve XmlDocument (Fx 1.0 – XML DOM) XPathDocument (Fx 2.0 - XPath) XDocument (Fx 3.5 – Linq to XML) Relatively easy to evolve (if designed and used properly); they can be simply replaced. Examples: XmlDocument, EventLog, SerialPort A
  • 43. Rich APIs with lots of features, thus with lots of dependencies Great usability, poor evolvability E.g. Object.GetType() – Every object has very easy access to its type, but also every object depends on Reflection Good for higher level components, not for the core of a platform NOTE: “Component” is an overloaded term. In this context it does not have a nything to do with “componentization.” Unfortunately, COD is already an esta blished term. A
  • 44. A.K.A. “Handle based design” (functional) Great evolvability, poor usability (sometimes) Low level sable 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
  • 45. Members with “heavy” dependencies can be extension metho ds for primitives in a separate component. This is essentially functional programming // low level assembly with no dependency on globalization namespace System { public struct Decimal { public string ToString(); // culture independent } } // higher level assembly namespace System { public static class DecimalFormatter { // decimal point character is culture sensitive public static string ToString(this Decimal d, string format); } } Note: Same namespace makes the API easy to use A
  • 46.  DO balance advances with compatibility. A
  • 47. Cross-Version Compatibility: code written for a version of a redist wor ks on a different version of the same redist. Cross-Redist Compatibility: code written for a redist works on a differ ent redist. Backward Compatibility: code written for a version of a redist works o n a newer version of the same redist. Forward Compatibility: code written for a version of a redist works on a previous version of the same redist. A
  • 48. Binary Compatibility: a binary runs on a different version or a different redist than what it was buil d for without recompilation. Source Compatibility: source code compiling on a version of a redist can be recompiled without c hanges on a different version or a different redist. API Compatibility: Stronger than source. Weaker than binary. Source compatibility allows for some changes in APIs (e.g. covariant changes to input p arameters). API Compatibility does not. A
  • 49. 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? For example, Silverlight interfaces cannot have l ess members than .NET interfaces, but concrete types can. A
  • 50.  AVOID duplication and overlap. A
  • 51.  AVOID duplication and overlap. Problem Space Show and Tell PLoP – Capable, Productive and Satisfied Patterns for Productivity A http://hillside.net/plop/plop98/final_submissions/P54.pdf
  • 52. When the new technology is “10x better” Make sure you understand the impact on the ec osystem What would happen if the BCL team added a new S tring? What’s the migration path for code using the ol d API? A
  • 53. This is where quality happens D
  • 54.  DO design APIs by first writing code samples f or the main scenarios and then defining the o bject model to support the code samples. D
  • 55. D
  • 56. static void Main(string[] args) { StreamReader sr = File.OpenText(quot;MyFile.txtquot;); string s = sr.ReadLine(); while (s != null) { s = sr.ReadLine(); Console.WriteLine(s); } }
  • 57. static void Main(string[] args) { foreach (string s in File.ReadAllLines(quot;MyFiles.textquot;)) { Console.WriteLine(s); } }
  • 58. D
  • 59. Project -> Add -> Assembly Download here - http://code.msdn.microsoft.com/fds
  • 60.
  • 61.
  • 62. Red is removed, Green is added, Grey means inherited.
  • 63. Tools -> Export to Document
  • 64.  DO treat simplicity as a feature. D
  • 65. Remove Requirements Reuse Existing Concepts or APIs Adjust Abstraction Level Evolving Framework (Three Example) D
  • 66.  DO measure, measure, and measure! D
  • 67. Performance Goals Baseline: What do is the best my API could do? Measure delta from the baseline Threat Models Threat: What is the worst that my component co uld do? Mitigate the threats Same for many other qualities you want your f ramework to have D
  • 68. The bits customers get, … or not V
  • 69. Main PU-staging PU-staging PU-staging branch branch branch Feature Feature branch branch V
  • 70.  AVOID integrating unfinished features. V
  • 71. 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
  • 72.  DO pay your debt. V
  • 73. Vision statement Feature complete RTM Release Planning M1 M2 Testing Technology Preview Beta 1 Beta 2 RC1 Milestone Quality
  • 74. 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
  • 75.  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 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.
  • 76. Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries Krzysztof Cwalina, Brad Abrams http://www.gotdotnet.com/team/fxcop
  • 77. 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)