Next Generation LOB (Line of Business) Applications

17,881 views
17,515 views

Published on

A presentation that explores what the next generation of LOB (Line Of Business) applications might look like, through five characteristics.

Published in: Technology

Next Generation LOB (Line of Business) Applications

  1. 1. Next Generation Line of Business (LOB) Applications Simon Guest Senior Director, Technical Strategy Microsoft Corporation
  2. 2. Introduction My First LOB Application
  3. 3. Introduction My First LOB Application Back to 1994
  4. 4. Introduction My First LOB Application My First LOB Application
  5. 5. Introduction My First LOB Application
  6. 6. Introduction My First LOB Application What would happen if I tried to write this today?
  7. 7. Introduction Defining a LOB Application
  8. 8. Introduction Defining a LOB Application Wikipedia: A line-of-business application is one of the set of critical computer applications that are vital to running an enterprise
  9. 9. Introduction Defining a LOB Application The following 5 characteristics:
  10. 10. Introduction Defining a LOB Application Interactive: LOB Applications are interactive by nature. Data is entered, and results/reports are returned.
  11. 11. Introduction Defining a LOB Application Composable: LOB applications tend to have one or more parts that compose the user interface. These parts may interact with each other as needed.
  12. 12. Introduction Defining a LOB Application Data Driven: LOB applications are data intensive. Many live “close” to the database, and access frequently.
  13. 13. Introduction Defining a LOB Application Integrated: LOB applications often integrate with other systems. These can be a variety of data feeds, either within or outside the organization.
  14. 14. Introduction Defining a LOB Application Extensible: LOB applications are extensible by nature. They often support add-ons or plug-ins used to tailor an application or make deployment easier.
  15. 15. Session Objectives What are you going to get from this session?
  16. 16. Session Objectives What are you going to get from this session? Explore each characteristic to help you apply to your own application Give you the details of what’s new in each of these areas Show through demos how we are supporting these new features
  17. 17. Interactive Entering data and getting results
  18. 18. Interactive Entering data and getting results Back to 1994 “How do I get this TAB order working?”
  19. 19. Interactive Entering data and getting results Since then... Better forms, many controls, better output, great reporting solutions, voice command, etc.
  20. 20. Interactive Entering data and getting results How about now? What am I excited about now? NUI (Natural User Input), specifically touch
  21. 21. Interactive Entering data and getting results Is touch going to replace the mouse and keyboard?
  22. 22. Interactive Entering data and getting results Touch augments the Windows experience. Every input method has it’s pros and cons – no input method is ideal for everything.
  23. 23. Interactive Entering data and getting results Are we really seeing devices that support touch?
  24. 24. Interactive Entering data and getting results Device Availability HP TouchSmart IQ504 PC DELL Latitude XT2 (Intel Core 2 Duo T5750) (Intel Core 2 Duo SU9400)
  25. 25. Interactive Entering data and getting results Is touch supported in Windows 7?
  26. 26. Interactive Entering data and getting results Gesture Single Multi Gesture Action Action Touch Touch Press on target, tap Press and Tap with other finger Yes Two fingers Zoom apart/together Yes Two fingers in Rotate opposing direction Yes Two Finger Tap Tap two fingers Yes Wait for blue ring and Press and Hold release Yes Yes Flicks Quick drag gestures Yes Yes
  27. 27. Interactive Entering data and getting results What you get for free Panning and Zooming, Right Click Gestures
  28. 28. Interactive Entering data and getting results Minimal Incremental Work Use WM_GESTURE Win32 API to trap gesture notifications, handle pan, zoom, and rotate
  29. 29. Interactive Entering data and getting results Best Experience Use WM_TOUCH Win32 API to handle raw touch data, manipulation, and inertia processors
  30. 30. Interactive Entering data and getting results Does this relate to “Surface”?
  31. 31. Interactive Entering data and getting results Surface Application Windows Forms WPF Native Application Application Surface SDK Win32 Multi-Touch Controls Application Managed Wrapper WPF 3.5 SP1 WPF 3.5 And Interop Windows 7 Surface (Multi-Touch API) Hardware
  32. 32. Interactive Entering data and getting results Surface Application Windows Forms WPF Native Application Application Surface SDK Win32 Specific Controls Application Managed Wrapper WPF 4.0 And Interop Multi-Touch Controls Windows 7 Surface (Multi-Touch API) Hardware
  33. 33. Interactive Entering data and getting results How about other input mechanisms?
  34. 34. Interactive Entering data and getting results Many other sensors exist today – but can be difficult…
  35. 35. Interactive Entering data and getting results e.g. to use a GPS, your application has to be device specific
  36. 36. Interactive Entering data and getting results How is this supported?
  37. 37. Interactive Entering data and getting results Windows 7 Sensor and Location Platform
  38. 38. Interactive Entering data and getting results Sensor Type Sensor Placement Typical Use GPS Built into, or attached to, computer Location and orientation Accelerometer Built into computer or attached to computer Motion and orientation Proximity Built in or nearby to the computer Presence and spatial awareness Light Built in, nearby, or remote Ambient light conditions RFID Built into the computer or attached to person Identification of physical items Compass Attached to person Orientation Camera Built into the computer or attached Recording, object identification, facial recognition Microphone Built into the computer or attached Ambient noise conditions Temperature Built into the computer or remote Indoor/Outdoor Ambient Temperature, cooking temperature Moisture Remote Detection of water leaks, garden sprinkler systems Motion Detector Built into the computer or remote Security systems, presense Traffic Remote, usually public Travel time predictions Weather station Remote, usually public Weather conditions and predictions
  39. 39. Interactive Entering data and getting results Single API call to answer questions – e.g. “Where am I?”
  40. 40. Interactive Entering data and getting results How does this work?
  41. 41. Interactive Entering data and getting results Your Application Location API Sensor API Sensor Class Sensor Class Extension Extension UMDF Sensor Driver UMDF Sensor Driver
  42. 42. Interactive Entering data and getting results That covers input, but how about “getting stuff out”?
  43. 43. Interactive Entering data and getting results Vendor Examples of Controls Offered Link Actipro WPF Studio Ribbon, Bar Code, Wizard, DateTime, Calendar, Transition, http://www.actiprosoftware.com Color Selection, Transition Effects Library Blendables Zoombox, ElementSnapshot, Carousel, http://www.blendables.com ChromelessWindow, DragAndDrop, Pie Chart, OS Check, Timeline Panel ComponentOne Schedule, Month Calendar, Chart, Grid http://www.componentone.com DevComponents Office UI, Window Management http://devcomponents.com Divelements Office UI, Window Management http://divelements.com/ Infragistics Carousel, DataPresenter, Grid, Masked Edit, DateTimeEdit, http://www.infragistics.com CurrencyEdit, NumericEdit, CheckEdit, TextEdit, ThemePacks, Chart Mindscape PropertyGrid, TextBoxes, DropDownPickers http://www.mindscape.com.nz NeoDynamic BarCode http://www.neodynamic.com Orbifold Diagraming tool http://www.orbifold.com SoftwareFx Charting http://www.softwarefx.com SyncFusion Docking, Office UI, GroupBar, Charting http://www.syncfusion.com Telerik RADControls Suite (Calendar, Carousels, Gauges, etc.) http://www.telerik.com Xceed Datagrid http://www.xceed.com
  44. 44. Interactive Entering data and getting results Name Type Link iTextSharp Generate PDF files on the fly http://csharp-source.net/open- source/pdf-libraries/itextsharp Report.NET PDF document creation from ADO.NET data source http://csharp-source.net/open- source/pdf-libraries/report.net PDF Sharp PDF creation including GDI+ like drawing routines http://csharp-source.net/open- source/pdf-libraries/pdfsharp SharpPDF PDF creation for .NET 1.1 http://csharp-source.net/open- source/pdf-libraries/sharppdf PDFjet Dynamic PDF generation from Java or .NET http://csharp-source.net/open- source/pdf-libraries/pdfjet-open- source-edition ASP.NET FO PDF Similar to ASP.NET Server Controls, written in C# http://csharp-source.net/open- source/pdf-libraries/asp.net-fo-pdf PDF Clown C# 2.0 library for reading, writing PDF files http://csharp-source.net/open- source/pdf-libraries/pdf-clown
  45. 45. Interactive Entering data and getting results But, what if I want to create Office documents?
  46. 46. Interactive Entering data and getting results “Old way” is to use the Application Object Model
  47. 47. Interactive Entering data and getting results …but: Need local copy of Office installed on server… Does not scale… Try running automation on 100s of documents… Dialog boxes “stop” automation… Have to reboot application on server every X hours…
  48. 48. Interactive Entering data and getting results Open XML SDK 2.0
  49. 49. Interactive Entering data and getting results How does the Open XML SDK work?
  50. 50. Interactive Entering data and getting results Developers see a zip file with XML parts File Container Users see a single file Document properties Comments WordML/SpreadsheetML/etc. Custom Defined XML Images, video, sounds MyDoc.docx Styles Charts
  51. 51. Interactive Entering data and getting results Demo - Using OpenXML SDK to read/write Word Documents
  52. 52. Interactive Entering data and getting results Talking about speeding things up… How about the processor?
  53. 53. Interactive Entering data and getting results Sun’s Surface 10,000 Power Density (W/cm2) Rocket Nozzle 1,000 Nuclear Reactor 100 8086 Hot Plate 10 8008 386 286 486 8080 1 ‘70 ‘80 ‘90 ‘00 ‘10 Intel Developer Forum, Spring 2004 - Pat Gelsinger
  54. 54. Interactive Entering data and getting results Isn’t developing parallel applications difficult?
  55. 55. Interactive Entering data and getting results Getting easier, especially with .NET 4.0 and Visual Studio 2010
  56. 56. Interactive Entering data and getting results PLINQ Parallel Debugger Task Parallel Library Concurrency Runtime Profiler Concurrency Thread Pool Analysis (Task Scheduler and Resource Manager) Threads Operating System
  57. 57. Interactive Entering data and getting results PLINQ Data Partitioning, Operator Types, Merging Task Parallel Library Loop replacements, Imperative Task Parallelism, Scheduling Concurrency Runtime Thread-safe Collections, Synchronization Types, Coordination Types
  58. 58. Interactive Entering data and getting results Demo - Running the Open SDK across multiple cores
  59. 59. Interactive Entering data and getting results What do we take away from this section?
  60. 60. Interactive Takeaways NUI is, and will, enhance LOB applications Getting results and reports is becoming easier Taking advantage of multi-core is within reach
  61. 61. Composable Designing and composing the user interface
  62. 62. Composable Designing and composing the user interface Back to 1994 With my old application, testing was “giving the application to the user”
  63. 63. Composable Designing and composing the user interface Since then... Increased focus on test driven development (TDD) and unit testing
  64. 64. Composable Designing and composing the user interface How about now? What am I excited about now? A renewed effort on making UIs more composable and testable
  65. 65. Composable Designing and composing the user interface Hasn’t it been difficult to test the UI?
  66. 66. Composable Designing and composing the user interface Patterns, such as MVC, help address these concerns
  67. 67. Composable Designing and composing the user interface But what should I use? MVC, MVP, PM, MVVM?
  68. 68. Composable Designing and composing the user interface MVC - Designed to separate concerns for request/response type UIs
  69. 69. Composable Designing and composing the user interface MVC (Model View Controller) Add a new customer to the model Model Please add a new Triggers update customer… Controller of the view Controller Reloads View View
  70. 70. Composable Designing and composing the user interface MVC is a great pattern for Web Applications
  71. 71. Composable Designing and composing the user interface MVC (Model View Controller) Add a new customer to the model Model http://localhost/customer/add (POST) Please add a new Reads number of customer… Controller customers “Done - you now have 20 customers” Controller Reloads View View
  72. 72. Composable Designing and composing the user interface ASP.NET MVC Does not use ViewState or Server Based Forms Extendable Front Controller pattern Project Support for TDD
  73. 73. Composable Designing and composing the user interface ASP.NET Web Forms ViewState to persist state across many components Page Controller Pattern Less complex, but more difficult to test
  74. 74. Composable Designing and composing the user interface Windows applications are less about request/response, and more interactive
  75. 75. Composable Designing and composing the user interface MVP (Model View Presenter) Request Presenter From Updates View Model Please add a new customer… View Presenter Model Presenter Model Updates Confirms View Change
  76. 76. Composable Designing and composing the user interface Modified version of MVP (Fowler) to handle data binding and code behind
  77. 77. Composable Designing and composing the user interface PM (PresentationModel) Request Presenter From Updates View Model Please add a new Presentation customer… View Model Model DataBinding Model Confirms Change
  78. 78. Composable Designing and composing the user interface MVP and PM are patterns that can be used with Windows Forms, WPF, and Silverlight
  79. 79. Composable Designing and composing the user interface PM (PresentationModel) Request Presenter From Updates Fill out fields and click on “Add” button View Model Please add a new Presentation customer… View Model Model Data Driven field for # DataBinding Model of customers Confirms now in system Change
  80. 80. Composable Designing and composing the user interface However, XAML also supports any item to be data bound to any other item in either direction
  81. 81. Composable Designing and composing the user interface Events in XAML bound to objects (vs. having code behind) e.g. button binds to object.add() XAML Object Objects bind to XAML visual elements e.g. object.customername binds to XAML Editbox
  82. 82. Composable Designing and composing the user interface MVVM (Model View ViewModel) ViewModel Updates Model Please add a new customer… View ViewModel Model DataBinding Model Confirms Change
  83. 83. Composable Designing and composing the user interface MVVM can be realized in WPF and Silverlight through PRISM
  84. 84. Composable Designing and composing the user interface Host Shell Shell Region Presenter Modules Validation View ViewModel Model Styles / Themes Module Shared Styles / Themes
  85. 85. Composable Designing and composing the user interface You mention WPF and Silverlight? What’s new when it comes to LOB applications?
  86. 86. Composable Designing and composing the user interface WPF 4.0 Windows 7 Support MultiTouch, Taskbar, DWrite Fundamentals Full trust XBAP, text rendering, data binding for DynamicObject, WPF Ribbon controls Design Experience Improved in Visual Studio and lessons learned from implementing Visual Studio in WPF
  87. 87. Composable Designing and composing the user interface Silverlight 3.0 RIA Productivity Improved controls, SEO enhancements, accessibility Out of Browser Both Win and Mac, isolated storage, auto update Design Tooling Expression Blend, SketchFlow, TFS integration, sample data
  88. 88. Composable Designing and composing the user interface What do we take away from this section?
  89. 89. Composable Takeaways Put some time in learning MVC, MVP, PM, MVVM MVVM can be implemented in Silverlight and WPF using PRISM New features such as Silverlight OOB for LOB applications
  90. 90. Data Driven Object relational mapping and exposing across tiers
  91. 91. Data Driven Object relational mapping and exposing across tiers Back to 1994 Accessing data was Direct SQL into a Dbase/Paradox DB
  92. 92. Data Driven Object relational mapping and exposing across tiers Since then... A million different ORMs, DALs, DTOs, and other ways to access data
  93. 93. Data Driven Object relational mapping and exposing across tiers How about now? What am I excited about now? Data Access becoming a more integral part of the application
  94. 94. Data Driven Object relational mapping and exposing across tiers What do you mean “integral”?
  95. 95. Data Driven Object relational mapping and exposing across tiers LinqToSQL (a.k.a. L2S)
  96. 96. Data Driven Object relational mapping and exposing across tiers Objects (Classes) Database Generate Take IEnumerable Existing Classes Schema Using Designer
  97. 97. Data Driven Object relational mapping and exposing across tiers DataClasses1DataContext ctx = new DataClasses1DataContext(); var customerNames = from c in ctx.Customers select c.ContactName; foreach (string name in customerNames) {…}
  98. 98. Data Driven Object relational mapping and exposing across tiers DataClasses1DataContext ctx = new DataClasses1DataContext(); var customerNames = from c in ctx.Customers where c.ContactName.StartsWith(“A”) select c.ContactName; foreach (string name in customerNames) {…}
  99. 99. Data Driven Object relational mapping and exposing across tiers DataClasses1DataContext ctx = new DataClasses1DataContext(); var customerNames = from c in ctx.Customers where c.ContactName.StartsWith(“A”) orderby c.ContactName select c.ContactName; foreach (string name in customerNames) {…}
  100. 100. Data Driven Object relational mapping and exposing across tiers DataClasses1DataContext ctx = new DataClasses1DataContext(); var customerNames = (from c in ctx.Customers where c.ContactName.StartsWith(“A”) orderby c.ContactName select c.ContactName).Take(5); foreach (string name in customerNames) {…}
  101. 101. Data Driven Object relational mapping and exposing across tiers Entity Framework (introduced in .NET 3.5 SP1)
  102. 102. Data Driven Object relational mapping and exposing across tiers Database First Entity Creation Objects Model (Classes) (EDMX) Database Generate Generate Take Objects Model Existing From From Schema Model Database
  103. 103. Data Driven Object relational mapping and exposing across tiers Wasn’t there some “constructive feedback” on EF? 
  104. 104. Data Driven Object relational mapping and exposing across tiers What did we hear? Persistence Ignorance N-Tier Developer Friction
  105. 105. Data Driven Object relational mapping and exposing across tiers New for EF 4.0 Automatic Pluralization Based on API T4 Template Generation Instead of CodeDom 3 Ways of Thinking of ORM Database first, model first, code only
  106. 106. Data Driven Object relational mapping and exposing across tiers Database First Entity Creation Start Here! Objects Model (Classes) (EDMX) Database Generate Generate Take Objects Model Existing From From Schema Model Database
  107. 107. Data Driven Object relational mapping and exposing across tiers Model First Entity Creation Start Here! Objects Model (Classes) (EDMX) Database Generate Create Generate Objects Model Schema From Using From Model Designer Model
  108. 108. Data Driven Object relational mapping and exposing across tiers Code Only Entity Creation Start Here! Objects Model (Classes) (EDMX) Database Write Create Generate Objects Model Schema From From Objects Model
  109. 109. Data Driven Object relational mapping and exposing across tiers Demo - Code First Approach in EF 4.0
  110. 110. Data Driven Object relational mapping and exposing across tiers I understand, but how do I pass that data across tiers?
  111. 111. Data Driven Object relational mapping and exposing across tiers ADO.NET Data Services (formerly known as Astoria)
  112. 112. Data Driven Object relational mapping and exposing across tiers ATOM/JSON Your Application … consumer REST endpoint exposed over model ADO.NET Data Services Model Database
  113. 113. Data Driven Object relational mapping and exposing across tiers Great for exposing data models to a variety of clients
  114. 114. Data Driven Object relational mapping and exposing across tiers I’m fed up of writing plumbing code. What’s new here?
  115. 115. Data Driven Object relational mapping and exposing across tiers .NET RIA Services
  116. 116. Data Driven Object relational mapping and exposing across tiers Goal: To boost productivity for developers looking to build RIA applications
  117. 117. Data Driven Object relational mapping and exposing across tiers Your Silverlight Application .NET RIA Services Consume Data Across Tier Is this the most productive use of your time? Expose Data Across Tier Model Database
  118. 118. Data Driven Object relational mapping and exposing across tiers Single solution to remove effort to write an n-tier application. Object lifecycle, data validation, authentication.
  119. 119. Data Driven Object relational mapping and exposing across tiers Demo - .NET RIA Services
  120. 120. Data Driven Object relational mapping and exposing across tiers What do we take away from this section?
  121. 121. Data Driven Takeaways Is your LOB application truly data driven? Is data access integral? How are you exposing data across an n-tier application? What frameworks exist that help abstract the “plumbing” for this?
  122. 122. Integrated Getting my application to talk nicely with others
  123. 123. Integrated Getting my application to talk nicely with others Back to 1994 “Integration” was an RS-232 serial port to a MPR, into a VMS system!
  124. 124. Integrated Getting my application to talk nicely with others Back to 1994 …and no need to consider external access!
  125. 125. Integrated Getting my application to talk nicely with others Since then... RMI, CORBA, DCOM, .NET Remoting, Web Services, BizTalk Adapters, ESBs, Sharepoint’s BDC
  126. 126. Integrated Getting my application to talk nicely with others How about now? What am I excited about now? Everything coming together in WCF 4.0
  127. 127. Integrated Getting my application to talk nicely with others Wait a minute! WCF is so complicated! What’s new that will make life easier?
  128. 128. Integrated Getting my application to talk nicely with others Default Endpoints
  129. 129. Integrated Getting my application to talk nicely with others ServiceHost host = new ServiceHost(typeof(MyService), new Uri(“http://localhost:8080/myservice”)); host.AddDefaultEndpoints(); host.Open();
  130. 130. Integrated Getting my application to talk nicely with others Easier Hosting in ASP.NET
  131. 131. Integrated Getting my application to talk nicely with others [ServiceContract()] public class Service1 { [OperationContract()] public string SayHello(string name) { return String.Format("Hello {0}", name); } }
  132. 132. Integrated Getting my application to talk nicely with others Discovery
  133. 133. Integrated Getting my application to talk nicely with others <service name=“HelloService”> <endpoint binding=“wsHttpBinding” contract=“IHello”/> <endpoint name=“udpDiscovery” kind=“udpDiscoveryEndpoint”/> </service>
  134. 134. Integrated Getting my application to talk nicely with others DiscoveryClient client = new DiscoveryClient(“udpDiscoveryEndpoint”); FindCriteria crtieria = new FindCriteria(typeof(IHello)); FindResponse response = client.Find(criteria);
  135. 135. Integrated Getting my application to talk nicely with others Service Announcements
  136. 136. Integrated Getting my application to talk nicely with others <serviceDiscovery> <announcementEndpoints> <endpoint kind=“udpAnnouncementEndpoint”/> </announcementEndpoints> </serviceDiscovery>
  137. 137. Integrated Getting my application to talk nicely with others AnnouncementService service = new AnnouncementService(); service.OnlineAnnouncementRecieved += OnOnlineEvent; service.OfflineAnnouncementRecieved += OnOfflineEvent; static void OnOnlineEvent(object sender, AnnouncementEventArgs e) {…}
  138. 138. Integrated Getting my application to talk nicely with others Managed Discovery
  139. 139. Integrated Getting my application to talk nicely with others Discovery Proxy Probe Service Register Proxy Service Announcement (FindCriteria) Service Call Service Client Service
  140. 140. Integrated Getting my application to talk nicely with others Content Based Routing Fault Tolerant Routing Improved REST Support Better Integrated between WF and WCF
  141. 141. Integrated Getting my application to talk nicely with others Sounds great. How do I use WCF outside the walls of the organization?
  142. 142. Integrated Getting my application to talk nicely with others .NET Service Bus
  143. 143. Integrated Getting my application to talk nicely with others Telco provided WAN Company 1 Company 2 Client Server FTP FTP Client Server
  144. 144. Integrated Getting my application to talk nicely with others Internet Telco provided WAN Company 1 Company 2 Client Server FTP FTP Client Server
  145. 145. Integrated Getting my application to talk nicely with others Internet Telco provided WAN Company 1 Company 2 DMZ Client Server Extranet Browser Site
  146. 146. Integrated Getting my application to talk nicely with others Company 1 Client Web Site Database Company 2 Client
  147. 147. Integrated Getting my application to talk nicely with others Company 1 Proxy? Firewall Client Web Site Database Company 2 Client Firewall
  148. 148. Integrated Getting my application to talk nicely with others Company 1 Firewall Client Web Site Database Company 2 65.55.33.204 Client Firewall 192.168.14.100 NAT?
  149. 149. Integrated Getting my application to talk nicely with others Company 1 Firewall Client Web Site Database Company 2 65.55.33.204 Client Firewall 192.168.14.100 OK, so I’ll do a HTTP poll every minute
  150. 150. Integrated Getting my application to talk nicely with others Company 1 Firewall Client Web Site Database Company 2 65.55.33.204 Client Firewall 192.168.14.100 …and how about other protocols other than HTTP?
  151. 151. Integrated Getting my application to talk nicely with others How does the .NET Service Bus help?
  152. 152. Integrated Getting my application to talk nicely with others Company 1 sb://.../myqueue Client .NET Service Bus Company 2 Client Firewall Outbound bi-directional socket Kept alive in background
  153. 153. Integrated Getting my application to talk nicely with others Company 1 Firewall sb://.../myqueue Client Outbound one-way socket .NET Service Bus Company 2 Message routed Client accordingly Firewall Outbound bi-directional socket Kept alive in background
  154. 154. Integrated Getting my application to talk nicely with others Demo - Using .NET Service Bus
  155. 155. Integrated Getting my application to talk nicely with others What do we take away from this section?
  156. 156. Integrated Takeaways WCF 4.0 provides an easier “on ramp” compared to previous versions Discovery and Service Announcements in WCF .NET Service Bus will open up new application types
  157. 157. Extensibility Extending and deploying my application
  158. 158. Extensibility Extending and deploying my application Back to 1994 Adding functionality to my application required a re-install.
  159. 159. Extensibility Extending and deploying my application Back to 1994 …and deploying was a weekend’s worth of overtime.
  160. 160. Extensibility Extending and deploying my application Since then... DI (Dependency Injection) and IoC (Inversion of Control), different ways to get bits to the box
  161. 161. Extensibility Extending and deploying my application How about now? What am I excited about now? MEF and improvements to ClickOnce
  162. 162. Extensibility Extending and deploying my application What is MEF?
  163. 163. Extensibility Extending and deploying my application MEF – Managed Extensibility Framework
  164. 164. Extensibility Extending and deploying my application Catalog CustomExportProvider CatalogExportProvider MutableExportProvider Composition Container Part Part Part Exports Exports Exports Imports Imports Imports
  165. 165. Extensibility Extending and deploying my application What’s this look like in my app?
  166. 166. Extensibility Extending and deploying my application Declare the interface for your extension public interface IMessageSender { void Send(string message); }
  167. 167. Extensibility Extending and deploying my application Add the Export attribute to your add-in [Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { public void Send(string message) { Console.WriteLine(message); } }
  168. 168. Extensibility Extending and deploying my application Create the container in your host application private void Compose() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(catalog); container.ComposeParts(this); }
  169. 169. Extensibility Extending and deploying my application Import the parts you are going to use [Import] public IMessageSender MessageSender { get; set; }
  170. 170. Extensibility Extending and deploying my application Extensibility is easier, but isn’t application deployment still painful?
  171. 171. Extensibility Extending and deploying my application .NET Framework Size and Reboots
  172. 172. Extensibility Extending and deploying my application .NET 4 Client: 28 MB X86 Client Profile, 48MB X86/X64 Full Profile 250 Size on media combined x86/x64 package 200 Size in Megabytes 150 100 50 0 "2.0" "3.0" "3.5" "3.5SP1" "4.0 Full" "4.0 Client"
  173. 173. Extensibility Extending and deploying my application Brandable Experience
  174. 174. Extensibility Extending and deploying my application Configurator Tool: http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=14962 Client Profile Configuration Designer “How To” Series: http://windowsclient.net/wpf/wpf35/wpf-35sp1-start-here.aspx
  175. 175. Extensibility Extending and deploying my application Improved ClickOnce Experience
  176. 176. Extensibility Extending and deploying my application Click Once Improvements – Command-line arguments for CO deployed apps – File associations for CO deployed apps – Background Updates for CO apps
  177. 177. Extensibility Extending and deploying my application Demo - Updating a ClickOnce Application
  178. 178. Extensibility Extending and deploying my application What do we take away from this section?
  179. 179. Extensibility Takeaways MEF enables you to think about extensibility from day one Client requirements are becoming less, and ClickOnce improving Challenge the notion that deployment is still hard
  180. 180. Call to Action What’s next?
  181. 181. Call to Action What’s next? Look at your LOB applications using the 5 characteristics Don’t be afraid to challenge some of your assumptions/decisions Be excited about the potential coming in the next wave!
  182. 182. simon.guest@microsoft.com http://simonguest.com © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

×