Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Framework EngineeringArchitecting, Designing, and Developing Reusable Libraries <br />http://www.arload.net<br />
손영수 arload@live.com동완이 아빠, 인옥이 남편!!EVA팀 리더PLoP패턴 저자AsianPLoP공동의장Blog http://www.arload.net<br />
Framework is ..<br />
Framework is…<br />
Douglas C. Schmidt Says..<br />Frameworks define “semi-complete” application<br /> that embody domain-specific object stru...
Libraries is..<br />Application Block<br />DATABASE<br />ADTs<br />MATH<br />NETWORKING<br />App Specific<br />Logic<br />...
But Framework is ..<br />Active Object<br />State<br />NETWORKING<br />GUI<br />Control – Flow (IoC)<br />MATH<br />Reacto...
Why Do You Need Framework?<br />Productivity<br />Avoid Duplication<br />
Why Do You Need Framework?<br />De Facto War<br />
Welcome to<br />My Framework<br />Journey!<br />
Seed References<br />“Framework Engineering”, TechED 2007 Europe<br />“Framework Design Guidelines” , Addison Wesley<br />...
5 Topics..<br />D<br />O<br />P<br />A<br />V<br />
OrganizationThe most powerful design tool<br />O<br />
Project Management Triangle<br />Scope<br />Time<br />Cost<br />O<br />
Organization<br />Project Management Triangle + 1<br />O<br />
Do understand how organizational structure, culture, and decision making processes impact your product. <br />O<br />
Conway's law<br />If you have 4 groups working on a compiler,<br />you’ll get a 4-pass compiler.<br />O<br />
Conway's law<br />O<br />
Conway's Clean State Approach<br />O<br />
Your Company Culture Is ..<br />Voluntary ??<br />O<br />
Your Company Culture Is ..<br />Familial ??<br />O<br />
Remember Your Company Culture ..<br />O<br />Peremptory<br />
Organizational InfluencesSize of Organization<br />Simple Design<br />Consistency Design<br />Focus on 80/20 Rules<br />Sm...
Organizational InfluencesSize of Organization<br />Powerful Design<br />Lack Consistency<br />Remove Requirements<br />Lar...
Organizational InfluencesOrganization’s Culture/Biases<br />Customer-Focused<br />End-2-End Scenarios<br />O<br />
Organizational InfluencesOrganization’s Culture/Biases<br />Technology-Focused<br />Long Lasting Architecture<br />O<br />
Decision Making Process is..<br />呼兄呼弟<br />O<br />
Solution ??<br />Give this book your boss..<br />
Planning Ensuring we are building the right thing <br />P<br />
P<br />
P<br />
Skyscrapers<br />Peanut Butter<br />Focus: features<br />Results: stability, incremental improvements, not great end-to-en...
Moderation (中庸)MileStone  = Scenarios + Feature<br />Vision statement<br />RTM<br />Feature complete<br />Release<br />Tes...
ArchitectureEnsuring the long term health of the framework<br />A<br />
Right Way??Choose right types.<br />A<br />
Taxonomy of TypesLibraries , Primitives, Abstractions<br />A<br />
Primitives<br />Very little policy (behavior design decisions)<br />Stable design<br />Commonly appear in publicly accessi...
Libraries<br />Definition:<br />Libraries are types that are not passed <br />		between components<br />Examples<br />Even...
Abstractions<br />Definition:<br />Abstractions are interfaces or classes with unsealed members that are passed between co...
Primitive Oriented Design<br />A.K.A. “Handle based design” (functional)<br />Great evolvability, poor usability (sometime...
Extension Method for primitive.. C# 3.0 New Feature<br />namespace MyCompany.StringManipulation { <br />    public static ...
Component Oriented Design<br />Rich APIs with lots of features, thus with lots of dependencies<br />Great usability, poor ...
Do Manage Dependencies..<br />A<br />A<br />
Component is ..<br />Lego, Plug ??<br />A<br />
Component is ..<br />.. a set of types that ship and evolve as a unit.<br />A<br />
Types of Dependencies<br />A<br />
API Dependency<br />Component A has an API dependency on component B, <br />	if a type in B shows in the publicly accessib...
Implemenatin Dependency<br />If a type in A uses a type in B in its implementation.<br />Hard Dependencies (required to ru...
Circular Dependency<br />Component A depends on component B  and<br />Component B depends on component A (even indirectly)...
Solution is Layering..<br />A<br />
Solution is Layering..<br />A<br />
WPF<br />XML<br /><br /><br /><br />BCL<br />Reflection<br />A<br />Dependency Management<br />
상황을 파악하는 좋은 방법DSM (Dependency Structure Matrix)<br />
간단한 DSM<br />
잘 계층화된 DSM<br />
엄격한 계층화를 유지한 시스템의 DSM<br />
불완전한 계층구조를 가진 시스템<br />Circular Dependency 발생.<br />
또 하나의 도구– Code Metrics<br />
xDepend(Ndepend, Xdepend, CDepend)<br />NDepend - http://www.xdepend.com<br />
Solution is..<br />Create a new package.<br />A<br />
circular dependency<br />GUI<br />Comm<br />Analysis<br />Protocol<br />Modem Control<br />Comm Error<br />Database<br />M...
Indirect circular dependency<br />A<br />X<br />B<br />Y<br />A<br />
Use Interface.<br />A<br />X<br />Y<br /><<interface>><br />BY<br />B<br />A<br />
Heavy Depedency..<br />A<br />
Solution is IoC<br />A<br />
Heavy Dependency.<br />// your API<br />public class Tracer {<br />MessageQueue mq = new MessageQueue(…);<br />	public voi...
Inversion of Control<br />// your better API<br />public abstract class TraceListener {<br />	public abstract void Trace(s...
Dependency Injection<br />// your customer’s program that is easier to test<br />Tracer tracer = new Tracer(new FileListen...
Dependency Injection Containers<br />// customer’s program that is even easier to test<br />Tracer tracer = container.Reso...
Packaging Principle<br />Package Cohesion Principle<br />REP (Release Reuse Equivalency)<br />CCP (Common Closure Principl...
Do balance advances with compatibility.<br />A<br />
Types of “Compatibility” <br />Backward<br />Cross-Version<br />Forward<br />A<br />
Cross-Redist.<br />A<br />
A<br />
Establishing Compatibility Bar<br />Define what’s a “breaking change”<br />This definition depends on the objective<br />E...
Avoid duplication and overlap.<br />A<br />
Team Space<br />Show and Tell<br />Problem Space<br />PLoP – Capable, Productive and Satisfied Patterns for Productivity<b...
When to Replace Existing APIs<br />When the new technology is “10x better”<br />Make sure you understand the impact on the...
DesignThis is where quality happens<br />D<br />
Is using your framework correctly like…<br />Running across a desert?<br />D<br />
You need Feedback.<br />D<br />
Do design APIs by <br />    first writing code samples for the main scenarios <br />      and then <br />defining the obj...
Code Samples<br />D<br />
Read File<br />static void Main(string[] args)<br />{<br />StreamReadersr = File.OpenText("MyFile.txt");<br />            ...
Feedback (Read File)<br />static void Main(string[] args)<br />{<br />foreach (string s in File.ReadAllLines("MyFiles.text...
Object Model Listing<br />D<br />
Framework Design Studio Assembly Exploer<br />Project -> Add -> Assembly<br />D<br />Download here - http://code.msdn.micr...
Framework Design Studio Assembly Review Comment<br />D<br />
Framework Design StudioCompare API Versions<br />D<br />
Framework Design StudioCompare API Versions<br />Red is removed, <br />Green is added,<br />Grey means inherited.<br />D<b...
Framework Design StudioExporting to Microsoft Word<br />Tools -> Export to Document<br />D<br />
Do treat simplicity as a feature.<br />D<br />
KISS (Keep It Simple! Stupid!)<br />Remove Requirements (ATAM).<br />Reuse Existing Concepts or APIs<br />Adjust Abstracti...
Domeasure, measure, and measure!<br />D<br />
Specification Document: Qualities<br />Performance Goals (XML Parser..)<br />Baseline: What do is the best my API could do...
 The POWER oFSameness<br />D<br />
 Read the manual??<br />When you pick up your rental car….<br />Push the seat all the way back<br />Find an NPR station<br...
Oh, down to lock…<br />D<br />
How to use a key…<br />D<br />
Oh, you push the PRESS button…<br />D<br />
Who actually needs this data?<br />D<br />
Why you don’t read manuals ???<br />You know how to drive your car<br />All cars work basically the same way<br />Your ren...
Static Analysis Tool <br />http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis<br />D<br />
DevelopmentThe bits customers get, … or not<br />V<br />
Branches and Integrations- Feature Crew<br />http://www.codeplex.com/BranchingGuidance/Wiki/View.aspx?title=Feature%20Crew...
Avoid integrating unfinished features.<br />V<br />
Feature Complete & Quality Gates<br />Functional Specification<br />Developer Design Specification<br />Test Plan<br />Thr...
Do pay your debt.<br />V<br />
Milestone Quality<br />Vision statement<br />RTM<br />Feature complete<br />Release<br />Testing<br />Planning<br />M1<br ...
Milestone Quality (MQ)<br />Initiatives that are hard to do in regular milestones<br />Large productivity and efficiency i...
Summary<br />Dounderstand how organizational structure, culture, and decision making processes impact your product. <br /...
Resources<br />Krzysztof Cwalina, Brad Abrams<br />Framework Design Guidelines:<br />Conventions, Idioms, and Patterns for...
Resources<br />Douglas C. Schmidt (PLoP Editor, POSA 2, 4 Writter)<br />JAWS: An Application Framework for High Performanc...
Resources<br />Robert C. Martin<br />Principles of Package Architecture (Design Principles and Design Patterns)<br />http:...
최근 저서 및 곧 나올 저서..<br />
곧 나올 저서..<br />
Question?<br />이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 <br />대한민국 라이센스에 따라 이용하실 수 있습니다.  <br />This work is licensed ...
Upcoming SlideShare
Loading in …5
×

of

Framework engineering JCO 2011 Slide 1 Framework engineering JCO 2011 Slide 2 Framework engineering JCO 2011 Slide 3 Framework engineering JCO 2011 Slide 4 Framework engineering JCO 2011 Slide 5 Framework engineering JCO 2011 Slide 6 Framework engineering JCO 2011 Slide 7 Framework engineering JCO 2011 Slide 8 Framework engineering JCO 2011 Slide 9 Framework engineering JCO 2011 Slide 10 Framework engineering JCO 2011 Slide 11 Framework engineering JCO 2011 Slide 12 Framework engineering JCO 2011 Slide 13 Framework engineering JCO 2011 Slide 14 Framework engineering JCO 2011 Slide 15 Framework engineering JCO 2011 Slide 16 Framework engineering JCO 2011 Slide 17 Framework engineering JCO 2011 Slide 18 Framework engineering JCO 2011 Slide 19 Framework engineering JCO 2011 Slide 20 Framework engineering JCO 2011 Slide 21 Framework engineering JCO 2011 Slide 22 Framework engineering JCO 2011 Slide 23 Framework engineering JCO 2011 Slide 24 Framework engineering JCO 2011 Slide 25 Framework engineering JCO 2011 Slide 26 Framework engineering JCO 2011 Slide 27 Framework engineering JCO 2011 Slide 28 Framework engineering JCO 2011 Slide 29 Framework engineering JCO 2011 Slide 30 Framework engineering JCO 2011 Slide 31 Framework engineering JCO 2011 Slide 32 Framework engineering JCO 2011 Slide 33 Framework engineering JCO 2011 Slide 34 Framework engineering JCO 2011 Slide 35 Framework engineering JCO 2011 Slide 36 Framework engineering JCO 2011 Slide 37 Framework engineering JCO 2011 Slide 38 Framework engineering JCO 2011 Slide 39 Framework engineering JCO 2011 Slide 40 Framework engineering JCO 2011 Slide 41 Framework engineering JCO 2011 Slide 42 Framework engineering JCO 2011 Slide 43 Framework engineering JCO 2011 Slide 44 Framework engineering JCO 2011 Slide 45 Framework engineering JCO 2011 Slide 46 Framework engineering JCO 2011 Slide 47 Framework engineering JCO 2011 Slide 48 Framework engineering JCO 2011 Slide 49 Framework engineering JCO 2011 Slide 50 Framework engineering JCO 2011 Slide 51 Framework engineering JCO 2011 Slide 52 Framework engineering JCO 2011 Slide 53 Framework engineering JCO 2011 Slide 54 Framework engineering JCO 2011 Slide 55 Framework engineering JCO 2011 Slide 56 Framework engineering JCO 2011 Slide 57 Framework engineering JCO 2011 Slide 58 Framework engineering JCO 2011 Slide 59 Framework engineering JCO 2011 Slide 60 Framework engineering JCO 2011 Slide 61 Framework engineering JCO 2011 Slide 62 Framework engineering JCO 2011 Slide 63 Framework engineering JCO 2011 Slide 64 Framework engineering JCO 2011 Slide 65 Framework engineering JCO 2011 Slide 66 Framework engineering JCO 2011 Slide 67 Framework engineering JCO 2011 Slide 68 Framework engineering JCO 2011 Slide 69 Framework engineering JCO 2011 Slide 70 Framework engineering JCO 2011 Slide 71 Framework engineering JCO 2011 Slide 72 Framework engineering JCO 2011 Slide 73 Framework engineering JCO 2011 Slide 74 Framework engineering JCO 2011 Slide 75 Framework engineering JCO 2011 Slide 76 Framework engineering JCO 2011 Slide 77 Framework engineering JCO 2011 Slide 78 Framework engineering JCO 2011 Slide 79 Framework engineering JCO 2011 Slide 80 Framework engineering JCO 2011 Slide 81 Framework engineering JCO 2011 Slide 82 Framework engineering JCO 2011 Slide 83 Framework engineering JCO 2011 Slide 84 Framework engineering JCO 2011 Slide 85 Framework engineering JCO 2011 Slide 86 Framework engineering JCO 2011 Slide 87 Framework engineering JCO 2011 Slide 88 Framework engineering JCO 2011 Slide 89 Framework engineering JCO 2011 Slide 90 Framework engineering JCO 2011 Slide 91 Framework engineering JCO 2011 Slide 92 Framework engineering JCO 2011 Slide 93 Framework engineering JCO 2011 Slide 94 Framework engineering JCO 2011 Slide 95 Framework engineering JCO 2011 Slide 96 Framework engineering JCO 2011 Slide 97 Framework engineering JCO 2011 Slide 98 Framework engineering JCO 2011 Slide 99 Framework engineering JCO 2011 Slide 100 Framework engineering JCO 2011 Slide 101 Framework engineering JCO 2011 Slide 102 Framework engineering JCO 2011 Slide 103 Framework engineering JCO 2011 Slide 104 Framework engineering JCO 2011 Slide 105 Framework engineering JCO 2011 Slide 106 Framework engineering JCO 2011 Slide 107 Framework engineering JCO 2011 Slide 108 Framework engineering JCO 2011 Slide 109 Framework engineering JCO 2011 Slide 110 Framework engineering JCO 2011 Slide 111 Framework engineering JCO 2011 Slide 112 Framework engineering JCO 2011 Slide 113 Framework engineering JCO 2011 Slide 114 Framework engineering JCO 2011 Slide 115 Framework engineering JCO 2011 Slide 116 Framework engineering JCO 2011 Slide 117
Upcoming SlideShare
Pattern and EA
Next
Download to read offline and view in fullscreen.

0 Likes

Share

Download to read offline

Framework engineering JCO 2011

Download to read offline

JCO 2011 발표 자료용
- DSM 관련 내용 업데이트
- Code Metrics 관련 내용 업데이트

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Framework engineering JCO 2011

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

JCO 2011 발표 자료용 - DSM 관련 내용 업데이트 - Code Metrics 관련 내용 업데이트

Views

Total views

3,586

On Slideshare

0

From embeds

0

Number of embeds

1,269

Actions

Downloads

58

Shares

0

Comments

0

Likes

0

×