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
10. Introduction
Defining a LOB Application
Interactive: LOB Applications are interactive by nature.
Data is entered, and results/reports are returned.
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. Introduction
Defining a LOB Application
Data Driven: LOB applications are data intensive. Many
live “close” to the database, and access frequently.
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. 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.
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
19. Interactive
Entering data and getting results
Since then...
Better forms, many controls, better
output, great reporting solutions, voice
command, etc.
20. Interactive
Entering data and getting results
How about now?
What am I excited about now?
NUI (Natural User Input),
specifically touch
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.
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)
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
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. Interactive
Entering data and getting results
Best Experience
Use WM_TOUCH Win32 API to handle raw touch data,
manipulation, and inertia processors
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. 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
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
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
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. 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
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…
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
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
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
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
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. 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. 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
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
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
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. 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. 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. 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
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. 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
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
91. Data Driven
Object relational mapping and exposing across tiers
Back to 1994
Accessing data was Direct SQL into a
Dbase/Paradox DB
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. 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
96. Data Driven
Object relational mapping and exposing across tiers
Objects
(Classes) Database
Generate Take
IEnumerable Existing
Classes Schema
Using
Designer
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. 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. 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. 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)
{…}
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
104. Data Driven
Object relational mapping and exposing across tiers
What did we hear?
Persistence Ignorance
N-Tier
Developer Friction
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. 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. 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. 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
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. Data Driven
Object relational mapping and exposing across tiers
Great for exposing data models to a
variety of clients
114. Data Driven
Object relational mapping and exposing across tiers
I’m fed up of writing plumbing code.
What’s new here?
116. Data Driven
Object relational mapping and exposing across tiers
Goal: To boost productivity for
developers looking to build RIA
applications
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. 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.
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?
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. 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. Integrated
Getting my application to talk nicely with others
Wait a minute! WCF is so
complicated!
What’s new that will make life easier?
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();
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);
}
}
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. 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);
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. Integrated
Getting my application to talk nicely with others
Content Based Routing
Fault Tolerant Routing
Improved REST Support
Better Integrated between WF and WCF
143. Integrated
Getting my application to talk nicely with others
Telco provided WAN
Company 1 Company 2
Client Server
FTP FTP
Client Server
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. Integrated
Getting my application to talk nicely with others
Internet
Telco provided WAN
Company 1 Company 2
DMZ
Client Server
Extranet
Browser
Site
147. Integrated
Getting my application to talk nicely with others
Company 1 Proxy?
Firewall
Client
Web Site Database
Company 2
Client
Firewall
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. 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. 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?
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. 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
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
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
164. Extensibility
Extending and deploying my application
Catalog
CustomExportProvider CatalogExportProvider MutableExportProvider
Composition Container
Part Part Part
Exports Exports Exports
Imports Imports Imports
166. Extensibility
Extending and deploying my application
Declare the interface for your extension
public interface IMessageSender
{
void Send(string message);
}
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. 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. Extensibility
Extending and deploying my application
Import the parts you are going to use
[Import]
public IMessageSender MessageSender { get; set; }
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
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
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!