Framework Engineering 2.1
Upcoming SlideShare
Loading in...5
×
 

Framework Engineering 2.1

on

  • 1,773 views

Framework 대가 부분 서두 추가

Framework 대가 부분 서두 추가
Team 부분 설명 추가
Breaking Changes 부분 추가

Statistics

Views

Total Views
1,773
Views on SlideShare
1,149
Embed Views
624

Actions

Likes
1
Downloads
30
Comments
0

4 Embeds 624

http://arload.wordpress.com 497
http://www.hanrss.com 63
http://www.hanrss.com 63
http://www.heej.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Framework Engineering 2.1 Framework Engineering 2.1 Presentation Transcript

  • Framework EngineeringArchitecting, Designing, and Developing Reusable Libraries
    http://www.arload.net
  • Framework is ..
  • Framework is…
    View slide
  • Douglas C. Schmidt Says..
    Frameworks define “semi-complete” application
    that embody domain-specific object structures and functionality.
    View slide
  • 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
  • The Experts of Framework
    SPLASH (구 OOPSLA ) / PLoP의 창시
    Gangs of Four 의일원
    Martin Fowler의 직/간접적 스승
    Framework 개념의 창시자
    Designing Reusable Classes
    Reusing Object-Oriented Design
    Documenting Frameworks Using Patterns
    Patterns For Framework Evolution.
    Ralph Johnson
  • The Experts of Framework
    패턴의 중흥기를 이끈 실질적 리더 –
    PLoP및 PLoPD Editor
    패턴으로 구축한 프레임워크 공개
    TAO, ACE등 – 다양한 분야 광범위하게 사용.
    실제 돌아가는 프레임워크와 패턴을 접목
    POSA 2, POSA 4, POSA 5권 저자
    http://www.cs.wustl.edu/~schmidt/
    Douglas
    C. Schmidt
  • The Experts of Framework
    Java Platform의 광범위한 부분을
    설계하고 구현한가장 영향력 있는 리더
    Sun에서 Google로 Chief Architect로 이직
    Java에 가장 영향력 있는 둘중에 한 분.
    How to Design a good api and Why it Matters
    http://www.youtube.com/watch?v=aAb7hSCtvGw
    Joshua
    Bloch
  • The Experts of Framework
    .NET Framework의쌍두마차.
    Visual C++ 부터 현재 .NET까지 총지휘
    Brad Abrams는 Google로 2010년 이직
    KC는 아직 .NET Framework를 진두 지휘
    실 세계의 Framework 설계 기법 공유
    Framework Design Guidelines 1st.
    Framework Design Guidelines 2nd.
    Brad Abrams,
    KrysztofCwalina
  • 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
  • Team Building
    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
  • Peanut Butter….
  • New Requirements Arrive…
  • Skyscrapers
    Cross Functional Team
  • Cross Functional Teams and Location
    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
  • 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
    Demo
  • 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 Dependency..
    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
  • Breaking Changes…
    Keep Backward Compatibility..
  • Breaking Changes…
    신한 은행 ezPlus
    Quiz - ezPlus의 버전은??
  • Breaking Changes…
    MS 직원과의 대화
    MS에서 새 API 추가와 기존 API 변경에 들이는 시간과 노력을 아시면 절대 그렇게 말하지 못할 것.
    중첩된 역할을 가진 API들이 많아지게 됨.
    비동기메소드
    DownloadAync, InvokeAsync, DownloadTaskAsync 
    동일한 역할을 하는 API들이 계속 늘어남..
    Java의 NewIO와 IO도 동일한 상황.
    대형 밴더들은 호환성은 가상화로 대체하자는 추세임.
  • Breaking Changes…
    MS에서 유일하게
    Backward Compatibility를 무시해도 되는 경우가 있음.
    Quiz – 무엇일까요?
  • Breaking Changes…
    새 술은 새 부대에..
    Apple/Android는 과감히 쓸모없는 것을 버리는 전략.
    새로운 기술과 경험이 들어감에 따라 API를 Refactoring하고 Cleanup해야 점점 사용해지기 쉬워져야 된다.
    단편화 문제가 발생함.
  • Breaking Changes…
    MS의 눈물겨운 Backward Compatibility 이야기.
    http://www.yes24.com/24/goods/2690684
  • Breaking Changes.
    .NET Framework Breaking Changes.
    .NET Framework 4.0 (3.5 -> 4.0)
    http://msdn.microsoft.com/en-us/library/ee941656.aspx
    .NET Framework 3.5 (2.0 -> 3.5)
    http://msdn.microsoft.com/en-us/library/dd310284.aspx
    .NET Framework 2.0 (1.0 -> 2.0)
    http://msdn.microsoft.com/ko-kr/netframework/aa570326.aspx
    기업에서 .NET 4.0으로 못 갈 정도로 큰 변화.
    민감한 Active X 문제 -
    (SmartClient를 실행시키는 IEHost.exe 제거)
  • 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
    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.