MSDN Magazine - September 2008 - (Page 71) NewsReader are wired up in order to listhen composed by a mechanism—usually StockTrader ten to the TickerSymbolSelected event and at run time, in contrast to being statically OrdersToolbar AddWatchView render their contents based on the selected composed at design time. ticker symbol. To illustrate the benefits of the pattern, Positions Buy & Sell In this case, the application is tightly think of an order entry system in which you coupled to each of the controls. There is a have multiple instances of an order. Each inPositionGrid WatchList significant amount of logic in the UI for costance may involve significant complexity ordinating the different pieces. There are also to display the header, details, shipping, and interdependencies among the controls. receipts. As the system evolves, it may need PositionSummary TrendLine ArticleView Due to these dependencies, there’s no easy to display more information. Imagine also way to break up the application into a form that parts of the order display differently where you can develop each of the different depending on the type of order. pieces separately. You could put all the user Figure 1 User Controls in a Monolithic App If such a screen is built statically, then you controls in a separate assembly to improve may end up with a lot of conditional logic for maintainability, but that only moves the problem from the main displaying the different parts of the order. Also, adding new funcapp to the control assembly. It’s very difficult in this model to make tionality increases the likelihood that the existing logic will break. significant changes or introduce new functionality. If we implement this as a composite view, however, then we comNow let’s complicate matters by adding two new business re- pose the order screen dynamically of only the relevant pieces. This quirements. The first is to add a fund notes screen that displays means that we can do away with conditional display logic and add personal notes about the selected fund when it is double-clicked. new child screens without modifying the order view itself. The second is to add a new screen that displays a list of hyperlinks Modules contribute the views from which the main composite related to the selected fund. Due to time constraints, these features view (otherwise known as the shell) is created. Modules never dimust be developed in parallel by different teams. rectly reference each other, nor do they directly reference the shell. Each team develops separate controls: FundNotes and FundLinks. Instead, they utilize services to communicate with one another and To add both controls to the same control assembly, they must each with the shell in order to respond to user actions. be added to the control project. More important, they must be addHaving a system composed of modules provides several benefits. ed to the main form, which means that changes to both code and Modules can aggregate data coming from different back-end sysXAML from each control must be merged with the main form. tems within the same application. Additionally, the system can more This type of operation can be incredibly brittle, especially for ex- easily evolve over time. As the system requirements change, new isting applications. modules can be added to the system with much less friction than How do you check all of these changes back into the main appli- in a non-modular system. Existing modules can then be evolved cation? By the time you’re done, you will have potentially spent a more independently, thus improving testability. Finally, modules significant amount of time doing merges and diffs in source control. can be developed, tested, and maintained by different teams. If you make any mistakes applying the changes or you accidentally overwrite something, you’ll be left with a broken application. The Composite Application Guidance remedy lies in rethinking the application design. The Microsoft patterns & practices team recently shipped the first version of Composite Application Guidance for WPF (availComposite Applications able at microsoft.com/CompositeWPF). The new guidance was designed A composite app consists of loosely coupled modules that are dy- to leverage the capabilities and programming model of WPF. At namically discovered and composed at run time. Modules contain the same time, the team also improved upon the design of previvisual and non-visual components repreous composite application guidance based senting the different vertical slices of the syson feedback from internal product teams, Composite Application tem (see Figure 2). The visual components customers, and the .NET community. Shell (views) are composed in a common shell that The Composite Application Guidance acts as the host for all of the app’s content. for WPF includes a reference implementaComposites provide services that tie these tion (the Stock Trader app discussed preApplication Services module-level components together. Modviously), a Composite Application Library ules can offer additional services that relate (CAL), quickstart applications, and design to the specific functionality of the app. and technical documentation. Module Module Module At a high level, a composite application is The CAL provides the services and plumban implementation of the Composite View ing for building composite apps. It uses a View View Services design pattern, which describes a recursive composition model that allows each of its UI structure of views containing children services to be used piecemeal or together as that are themselves views. The views are Figure 2 Components of a Composite App part of a CAL-designed app. Each service is msdnmagazine.com September 2008 71 microsoft.com/CompositeWPF msdnmagazine.com
Table of Contents Feed for the Digital Edition of MSDN Magazine - September 2008 MSDN Magazine - September 2008 Contents Toolbox CLR Inside Out Data Points Advanced Basics Office Space Cutting Edge Hierarchy ID New Features for Microsoft SQL Server 2008 Prism Data Services Advanced WPF Test Run Security Briefs Foundations { End Bracket } MSDN Magazine - September 2008 MSDN Magazine - September 2008 - (Page Intro) MSDN Magazine - September 2008 - Contents (Page Cover1) MSDN Magazine - September 2008 - Contents (Page Cover2) MSDN Magazine - September 2008 - Contents (Page 1) MSDN Magazine - September 2008 - Contents (Page 2) MSDN Magazine - September 2008 - Contents (Page 3) MSDN Magazine - September 2008 - Contents (Page 4) MSDN Magazine - September 2008 - Contents (Page 5) MSDN Magazine - September 2008 - Contents (Page 6) MSDN Magazine - September 2008 - Contents (Page 7) MSDN Magazine - September 2008 - Contents (Page 8) MSDN Magazine - September 2008 - Contents (Page 9) MSDN Magazine - September 2008 - Contents (Page 10) MSDN Magazine - September 2008 - Toolbox (Page 11) MSDN Magazine - September 2008 - Toolbox (Page 12) MSDN Magazine - September 2008 - Toolbox (Page 13) MSDN Magazine - September 2008 - Toolbox (Page 14) MSDN Magazine - September 2008 - Toolbox (Page 15) MSDN Magazine - September 2008 - Toolbox (Page 16) MSDN Magazine - September 2008 - Toolbox (Page 17) MSDN Magazine - September 2008 - Toolbox (Page 18) MSDN Magazine - September 2008 - CLR Inside Out (Page 19) MSDN Magazine - September 2008 - CLR Inside Out (Page 20) MSDN Magazine - September 2008 - CLR Inside Out (Page 21) MSDN Magazine - September 2008 - CLR Inside Out (Page 22) MSDN Magazine - September 2008 - CLR Inside Out (Page 23) MSDN Magazine - September 2008 - CLR Inside Out (Page 24) MSDN Magazine - September 2008 - CLR Inside Out (Page 25) MSDN Magazine - September 2008 - CLR Inside Out (Page 26) MSDN Magazine - September 2008 - Data Points (Page 27) MSDN Magazine - September 2008 - Data Points (Page 28) MSDN Magazine - September 2008 - Data Points (Page 29) MSDN Magazine - September 2008 - Data Points (Page 30) MSDN Magazine - September 2008 - Data Points (Page 31) MSDN Magazine - September 2008 - Data Points (Page 32) MSDN Magazine - September 2008 - Data Points (Page 33) MSDN Magazine - September 2008 - Data Points (Page 34) MSDN Magazine - September 2008 - Advanced Basics (Page 35) MSDN Magazine - September 2008 - Advanced Basics (Page 36) MSDN Magazine - September 2008 - Advanced Basics (Page 37) MSDN Magazine - September 2008 - Advanced Basics (Page 38) MSDN Magazine - September 2008 - Advanced Basics (Page 39) MSDN Magazine - September 2008 - Advanced Basics (Page 40) MSDN Magazine - September 2008 - Advanced Basics (Page 41) MSDN Magazine - September 2008 - Advanced Basics (Page 42) MSDN Magazine - September 2008 - Advanced Basics (Page 43) MSDN Magazine - September 2008 - Advanced Basics (Page 44) MSDN Magazine - September 2008 - Office Space (Page 45) MSDN Magazine - September 2008 - Office Space (Page 46) MSDN Magazine - September 2008 - Office Space (Page 47) MSDN Magazine - September 2008 - Office Space (Page 48) MSDN Magazine - September 2008 - Office Space (Page 49) MSDN Magazine - September 2008 - Office Space (Page 50) MSDN Magazine - September 2008 - Office Space (Page 51) MSDN Magazine - September 2008 - Office Space (Page 52) MSDN Magazine - September 2008 - Cutting Edge (Page 53) MSDN Magazine - September 2008 - Cutting Edge (Page 54) MSDN Magazine - September 2008 - Cutting Edge (Page 55) MSDN Magazine - September 2008 - Cutting Edge (Page 56) MSDN Magazine - September 2008 - Cutting Edge (Page 57) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 58) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 59) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 60) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 61) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 62) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 63) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 64) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 65) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 66) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 67) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 68) MSDN Magazine - September 2008 - New Features for Microsoft SQL Server 2008 (Page 69) MSDN Magazine - September 2008 - Prism (Page 70) MSDN Magazine - September 2008 - Prism (Page 71) MSDN Magazine - September 2008 - Prism (Page 72) MSDN Magazine - September 2008 - Prism (Page 73) MSDN Magazine - September 2008 - Prism (Page 74) MSDN Magazine - September 2008 - Prism (Page 75) MSDN Magazine - September 2008 - Prism (Page 76) MSDN Magazine - September 2008 - Prism (Page 77) MSDN Magazine - September 2008 - Prism (Page 78) MSDN Magazine - September 2008 - Prism (Page 79) MSDN Magazine - September 2008 - Data Services (Page 80) MSDN Magazine - September 2008 - Data Services (Page 81) MSDN Magazine - September 2008 - Data Services (Page 82) MSDN Magazine - September 2008 - Data Services (Page 83) MSDN Magazine - September 2008 - Data Services (Page 84) MSDN Magazine - September 2008 - Data Services (Page 85) MSDN Magazine - September 2008 - Data Services (Page 86) MSDN Magazine - September 2008 - Advanced WPF (Page 87) MSDN Magazine - September 2008 - Advanced WPF (Page 88) MSDN Magazine - September 2008 - Advanced WPF (Page 89) MSDN Magazine - September 2008 - Advanced WPF (Page 90) MSDN Magazine - September 2008 - Advanced WPF (Page 91) MSDN Magazine - September 2008 - Advanced WPF (Page 92) MSDN Magazine - September 2008 - Advanced WPF (Page 93) MSDN Magazine - September 2008 - Advanced WPF (Page 94) MSDN Magazine - September 2008 - Advanced WPF (Page 95) MSDN Magazine - September 2008 - Advanced WPF (Page 96) MSDN Magazine - September 2008 - Test Run (Page 97) MSDN Magazine - September 2008 - Test Run (Page 98) MSDN Magazine - September 2008 - Test Run (Page 99) MSDN Magazine - September 2008 - Test Run (Page 100) MSDN Magazine - September 2008 - Test Run (Page 101) MSDN Magazine - September 2008 - Test Run (Page 102) MSDN Magazine - September 2008 - Test Run (Page 103) MSDN Magazine - September 2008 - Test Run (Page 104) MSDN Magazine - September 2008 - Security Briefs (Page 105) MSDN Magazine - September 2008 - Security Briefs (Page 106) MSDN Magazine - September 2008 - Security Briefs (Page 107) MSDN Magazine - September 2008 - Security Briefs (Page 108) MSDN Magazine - September 2008 - Security Briefs (Page 109) MSDN Magazine - September 2008 - Security Briefs (Page 110) MSDN Magazine - September 2008 - Security Briefs (Page 111) MSDN Magazine - September 2008 - Security Briefs (Page 112) MSDN Magazine - September 2008 - Foundations (Page 113) MSDN Magazine - September 2008 - Foundations (Page 114) MSDN Magazine - September 2008 - Foundations (Page 115) MSDN Magazine - September 2008 - Foundations (Page 116) MSDN Magazine - September 2008 - Foundations (Page 117) MSDN Magazine - September 2008 - Foundations (Page 118) MSDN Magazine - September 2008 - Foundations (Page 119) MSDN Magazine - September 2008 - { End Bracket } (Page 120) MSDN Magazine - September 2008 - { End Bracket } (Page Cover3) MSDN Magazine - September 2008 - { End Bracket } (Page Cover4)
For optimal viewing of this digital publication, please enable JavaScript and then refresh the page. If you would like to try to load the digital publication without using Flash Player detection, please click here.