Chapter 1 — Introduction
Smart Client Architecture and Design Guide
David Hill, Brenton Webster, Edward A. Jezierski, Srinath Vasireddy and Mohammad Al-Sabt, Microsoft Corporation; Blaine Wastell, Ascentium Corporation; Jonathan Rasmusson and Paul Gale, ThoughtWorks; and Paul Slater, Wadeware LLC
Microsoft® patterns & practices Library http://msdn.microsoft.com/en-us/practices/default.aspx
Application Architecture for .NET: Designing Applications and Services http://msdn.microsoft.com/en-us/library/ms954595.aspx
Summary: This chapter gives a high-level description of smart client applications and describes some of their basic properties and benefits. It then discusses some of the high-level architectural issues and provides guidance to help you determine if a smart client architecture is right for your application.
What Is a Smart Client?
Types of Smart Clients
Choosing Between Smart Clients and Thin Clients
Smart Client Architectural Challenges
Scope of This Guide
How to Use This Guide
Who Should Read This Guide
Welcome to the Smart Client Architecture and Design guide. Smart client applications are a powerful alternative to thin client applications. They can provide users with a rich and responsive user interface, the ability to work offline, and a way to take advantage of local hardware and software resources. In addition, they can be designed to run on a broad spectrum of client devices, including desktop PCs, Tablet PCs, and handheld mobile devices such as Pocket PCs and Smartphones. Smart clients give users access to information and remote services within a powerful and intuitive client environment, and are an effective solution for flexible user-oriented applications and for increasing user productivity and satisfaction.
Smart client applications can be designed to combine the traditional benefits of a rich client application with the manageability benefits of a thin client application. However, to fully realize the benefits of a smart client application, you need to consider a number of architectural and design issues. This guide describes the architectural and design challenges you will face when designing and implementing a smart client application. It provides guidance on how to overcome these challenges, allowing you realize the benefits of a smart client application in as short a time as possible.
Note Additional technical resources on smart clients are available from the Smart Client Developer Center at http://msdn.microsoft.com/en-us/smartclient/default(MSDN.10).aspx. The business value of smart clients is discussed on the Microsoft .NET site at http://msdn.microsoft.com/en-us/smartclient/default(MSDN.10).aspx.
To fully understand how smart clients combine the benefits of rich clients and thin clients, it is useful to examine the history and underlying principles behind the rich and thin client application models, and review some of the advantages and disadvantages associated with each.
Rich Client Applications
In the mid-1990s, the number of rich client applications developed for the Microsoft® Windows® operating system increased dramatically. These clients were designed to take advantage of the local hardware resources and the features of the client operating system platform.
Despite the impressive functionality of many of these applications, they have limitations. Many of these applications are stand-alone and operate on the client computer, with little or no awareness of the environment in which they operate. This environment includes the other computers and any services on the network, as well as any other applications on the user's computer. Very often, integration between applications is limited to using the cut or copy and paste features provided by Windows to transfer small amounts of data between applications.
There are technologies to help increase the connectivity of rich client applications. For example, two-tier applications allow multiple users to access common data residing on the network, and DCOM allows applications to become more distributed. (With DCOM, logic and state are no longer tied to the client computer, and instead are encapsulated within objects that are then distributed across multiple computers.) However, connected applications are considerably more complex to develop. As the size and complexity of these distributed applications grows, any tight coupling between client applications and the services they consume becomes increasingly difficult to maintain.
While rich clients typically provide a high-quality, responsive user experience and have good developer and platform support, they are very difficult to deploy and maintain. As the complexity of the applications and the client platform increases, so do the difficulties associated with deploying the application to the client computer in a reliable and secure way. One application can easily break another application if an incompatible shared component or library is deployed, a phenomenon known as application fragility. New versions of the application are typically made available by redeploying the entire application, which can increase an application fragility problem.
Thin Client Applications
The Internet provides an alternative to the traditional rich client model that solves many of the problems associated with application deployment and maintenance. Thin client, browser-based applications are deployed and updated on a central Web server; therefore, they remove the need to explicitly deploy and manage any part of the application to the client computer.
This model allows companies to very efficiently expose their applications to a large and diverse external audience. Because thin clients have proven to be effective at solving some of the deployment and manageability problems, they are now used to provide access to many line-of-business (LOB) applications to users within an organization, as well as access to externally facing applications to customers and partners. This is despite the fact that the needs and expectations of these two types of users are often radically different.
Thin client applications have some disadvantages. The browser must have a network connection at all times. This means that mobile users have no access to applications if they are disconnected, so they must reenter data when they return to the office. Also, common application features such as drag-and-drop, undo-redo, and context-sensitive help may be unavailable, which can reduce the usability of the application.
Because the vast majority of the application logic and state lives on the server, thin clients make frequent requests back to the server for data and processing. The browser must wait for a response before the user can continue to use the application; therefore, the application will typically be much less responsive than an equivalent rich client application. This problem is exacerbated in low bandwidth or high latency conditions, and the resulting performance problems can lead to a significant reduction in application usability and user efficiency. An LOB application that requires heavy data entry and/or frequent navigation across multiple windows can be particularly affected by this problem.
Smart Client Applications
Smart client applications can be designed to combine the benefits of a rich client application with the deployment and manageability strengths of a thin client application, although the precise nature of the balance between the two approaches depends on the exact scenario.
Smart client applications often have very diverse requirements, and so vary greatly in design and implementation. However, all smart clients share some or all of the following characteristics:
- Make use of local resources
- Make use of network resources
- Support occasionally connected users
- Provide intelligent installation and update
- Provide client device flexibility
Many applications do not need all of these characteristics. As you design your smart clients, you will need to carefully consider your application scenario and decide which of these characteristics your smart client application requires. Incorporating all of these characteristics into your application will require very careful planning and design, and in many cases you will need significant implementation resources.
Note The .NET Framework helps you to implement many of the characteristics of smart client applications. Self-describing and tightly bound assemblies, along with support for isolated and side-by-side installation of multiple versions of an application, help to reduce application deployment and fragility problems associated with rich clients. The .NET Framework base class library provides extensive support for interaction with Web services, and provides Windows Forms. By using the common language runtime (CLR), you can use any .NET-supported language to develop your smart clients.
Using Local Resources
A well-designed smart client application takes maximum advantage of the fact that code and data are deployed on the client and executed and accessed locally. It provides an application with a rich and responsive user interface and powerful client-side processing capabilities. For example, it might enable the user to perform complex data manipulation, visualization, searching, or sorting operations.
Smart clients can take advantage of client-side hardware resources (such as telephones or barcode readers) and other software and applications. This makes them well suited to solve problems that a thin client application cannot solve well, such as point-of-sale applications. Smart clients can also take advantage of local software, such as Microsoft Office applications, or any installed LOB application on the client computer. Creating solutions that integrate with and coordinate multiple LOB applications allows your users to work more efficiently, make better decisions, and reduce data entry errors. Such solutions can also allow your application to be more tightly integrated with the user's working environment — for example by having a custom or familiar user interface — which can lead to decreased training costs.
Other client applications can be integrated or coordinated by the smart client application to provide a coherent and efficient overall solution. These applications should also be aware of the context in which the applications are being used, and should adapt to that context to aid the user as much as possible; for example, by preemptively caching appropriate and useful data according to the pattern of usage or the role of the user.
Maximizing the use of and integrating local resources into your smart client application enables your application to make better and more efficient use of the hardware that is already available to you. Very often, processing power, memory, and advanced graphical capabilities go unused. Using the resources on the client computer can also reduce server-side hardware requirements.
Using Network Resources
Smart clients can consume and use different services and data over the network. They are an effective way to retrieve data from many different sources and can be designed to analyze or aggregate the data, allowing the user to make more efficient and better informed decisions. For example, a smart client could use a mapping service to provide details on location and driving directions.
Smart client applications should be as connected as possible and should make use of the resources and services that are available to them over the network. They should not be stand-alone applications and should always form part of a larger distributed solution. At a minimum, a smart client application should use centralized services that help maintain the application and provide deployment and update services.
The connected nature of smart client applications allows them to provide valuable data aggregation, analysis, and transformation services. They can allow users to collaborate on tasks in real time or over a period of time. In many cases, a smart client application can provide portal-like capabilities to the user, allowing disparate data and services to be coordinated and integrated into an overall solution.
For details about how to design your smart clients to make use of connected services, see Chapter 2: Handling Data
Supporting Occasionally Connected Users
Smart clients can be designed to provide functionality to users who are occasionally connected to the network, allowing the user to continue to work efficiently when explicitly offline, in low bandwidth or high latency network conditions, or when connectivity is intermittent. For mobile applications, smart clients can also optimize network bandwidth, for example by batching requests to the server to make better use of expensive connectivity.
Even when the client is connected to the network most of the time, smart client applications can improve performance and usability by caching data and managing the connection in an intelligent way. In a low bandwidth or high latency environment, for example, a smart client application can manage the connection in such a way that the usability and responsiveness of the application is not impaired and the user can continue to work efficiently.
Being able to work while disconnected or only occasionally connected increases user productivity and satisfaction. A smart client application should aim to provide as much functionality as possible when offline.
For details about how to design your smart client applications to support occasionally connected users, see Chapter 4: Occasionally Connected Smart Clients
Providing Intelligent Installation and Update
Some of the biggest problems with traditional rich clients occur when the application is deployed or updated. Many rich client applications have a large number of complex installation requirements and may share code by registering components and/or by installing DLLs in a common location, leading to application fragility and update difficulties.
Smart client applications can be designed to manage their deployment and update in a much more intelligent and flexible way than traditional rich client applications. They can avoid these common problems, which can help to reduce your application management costs.
There are a number of different ways to deploy smart clients. These include simply copying files onto a local computer, downloading code automatically from a central server using no-touch deployment, or deploying Windows Installer packages using an enterprise push technology such as Microsoft Systems Management Server (SMS). The method you choose will depend on your specific situation.
Smart client applications can update themselves automatically, either when they are run or in the background. This capability allows them to be updated on a role-by-role basis; updated in a staged manner, allowing applications to be rolled out to pilot groups or a limited set of users; or updated according to an established schedule.
The .NET Framework allows you to strongly name your application components, which means that the application can specify and run with the exact versions of the components with which it was built and tested. The .NET Framework allows applications to be isolated from each other so that installing one application will not break another application, and multiple versions of the same application can be deployed side by side. These features greatly simplify application deployment and remove many of the application fragility problems that were associated with rich client applications.
For more information about intelligent installation and updates, see Chapter 7: Deploying and Updating Smart Clients.
Providing Client Device Flexibility
Smart clients can also provide a flexible and customizable client environment, allowing the user to configure the application to support his or her preferred way of working. Smart client applications are not restricted to desktop or laptop computers. As connectivity and the power of small-scale devices increases, the need for useful client applications that provide access to essential data and services on multiple devices also increases. Together with the .NET Compact Framework, the .NET Framework provides a common platform on which smart client applications can be built.
Smart clients can be designed to adapt to the host environment, providing appropriate functionality for the device on which they are running. For example, a smart client application designed to run on a Pocket PC should provide a user interface that is tuned to using a stylus on a small screen area.
In many cases, you will need to design multiple versions of a smart client application, each targeting a specific device type to take full advantage of the particular features supported by the device. Because small-scale devices are typically limited in their ability to deliver a full range of smart client application features, they may provide mobile access to only a subset of the data and services that a fully featured smart client application provides, or they may be used to collect and aggregate data when the user is mobile. This data can then be analyzed or processed by a more fully featured smart client application or by a server-side application.
An awareness of the capabilities and usage environment of the target device, whether it is a desktop, laptop, tablet, or mobile device, and the ability to tailor the application to provide the most appropriate functionality are essential features of many smart client applications.
Note This guide does not cover architectural and design details specific to the development of smart client applications to be run on mobile devices, but many of the topics that are covered are equally relevant whether the application is run on a desktop computer or another device.
Smart clients vary greatly in design and implementation, both in application requirements and in the number of scenarios and environments in which they can be used. Smart clients therefore can take many different forms and styles. These forms can be divided into three broad categories according to the platform that the smart client application is targeting:
- Windows smart client applications
- Office smart client applications
- Mobile smart client applications
It is common for a smart client application to target one or more of these platforms, depending on the role of the user and the functionality required. Such flexibility is one of the key strengths of smart client applications.
The remainder of this guide concentrates on issues that are common to all three types of smart client applications, rather than providing a detailed explanation of issues that affect each individual category. However, it is useful to briefly examine each type in turn so that you can determine which style of application might be best for your situation.
Windows Smart Client Applications
When you think of a rich client application, you may typically think of a desktop application that uses available system resources and that provides a rich user interface. Windows-targeted smart client applications represent an evolution of traditional rich client applications, and provide specific and targeted functionality.
These kinds of applications typically use Windows Forms to provide a familiar Windows-style user interface, where the application itself provides much of the functionality and does not rely on another application to provide the main user interface. Such smart clients can range from simple applications deployed over HTTP to very sophisticated applications.
A Windows smart client application is suitable in situations where an application needs to be deployed and accessed as a familiar desktop-type application. These types of applications typically provide the majority of their functionality themselves but can integrate with or coordinate other applications when appropriate. They provide application functionality tuned to particular tasks to provide specific or high-performance processing or graphical capabilities.
Windows smart client applications are typically most suitable for applications that run on desktop, laptop, or tablet PCs. In addition, they generally provide functionality that is not tightly associated with a particular document or document type.
These kinds of Windows smart client applications can be used in a wide variety of situations, for instance as LOB, financial, scientific, or collaborative applications. Examples of these kinds of applications are Microsoft Money and the Microsoft Outlook® messaging and collaboration client.
Office Smart Client Applications
Microsoft Office System 2003 provides you with a useful platform on which to build smart client applications, especially in an enterprise setting. With an Office smart client solution, you can integrate data sources, accessed through Web services, with the features of Word 2003, Excel 2003, InfoPath 2003, or other Office applications to develop smart client solutions.
Such Office smart client applications can become an integrated part of an organization's information management cycle, not just static containers for document data. They can provide context-sensitive data as the user works within a document, as well as workflow and task guidance, data analysis, collaboration, reporting, and presentation features that turn data exposed by Web services into useful information.
Microsoft Office supports XML and separates the data from other aspects of a document so that it can be reused by other applications. Because application data in Microsoft Office can be described by the same customer-defined XML schema across multiple applications, developers can integrate that data into smart client applications.
Microsoft Office 2003 has a number of key features and options for building smart client solutions. These include:
- Smart tags. Smart tags give applications a way to provide users with context-sensitive data pertaining to the contents of a document and allow them to easily see and use relevant information when working within a document. For example, smart tags can be used to provide account status for customers as those customers are referenced within a document, or they can be used to provide order status information as an order ID is typed. This contextualized feedback permits users to make more informed decisions as they work.
- Smart documents. Smart documents provide a more powerful way for the user to interact with documents and business Web services. Smart documents are a new type of solution model for Word 2003 and Excel 2003 that have an underlying XML structure and a customized task pane. The task pane can be used to display contextual information, tasks, tools, next steps, and other relevant information to the user. The user is able to initiate other actions and tasks by interacting with the task pane, allowing comprehensive business solutions to be constructed.
- Microsoft Visual Studio® Tools for the Microsoft Office System. This suite of tools enables developers to create managed code Office smart client applications by using the Microsoft Visual Studio .NET 2003 development system. Developers can separate document solutions from the underlying code (an alternative to previous smart client models that contained Visual Basic for Applications macros with custom logic). Using managed code with Microsoft Office provides developers with more effective options for creating, deploying, and managing updates for smart client solutions.
- Microsoft Office InfoPath 2003. InfoPath 2003 is an application that can gather structured data from the user by using a form-like interface. InfoPath 2003 provides support for XML Web services, a form-based user interface, and support for standard technologies such as WSDL and UDDI. InfoPath 2003 supports limited offline use by allowing the user to interact with the form when offline and then allowing the user to forward the form to a Web service when the user is online.
This guide does not attempt to cover any of the issues specific to Office smart clients, but most of the topics that are covered are entirely relevant to the smart client applications discussed above.
Mobile Smart Client Applications
Mobile smart clients are applications that run on smart devices — Pocket PCs, Smartphones, and other small form factor devices such as set-top boxes. These applications are developed using the .NET Compact Framework, which is a subset of the full .NET Framework.
The .NET Compact Framework has many of the features of the full .NET Framework, supports XML, and consumes Web services. It is optimized for use on small form factor devices, and it includes the Windows Forms designer for developing the user interface.
By using the Visual Studio .NET Smart Device Projects, you can develop smart clients that will run on the .NET Compact Framework. This approach allows you to develop, test, and debug an application by using Visual Studio .NET on an emulator of the small form factor device. The use of an emulator significantly speeds up development and testing of these types of applications.
Mobile smart client applications are typically used to provide mobile access to essential data and services, or to collect and aggregate data when the user is mobile. Examples of these types of applications are insurance and financial data-gathering applications, inventory management applications, and personal productivity management applications.
This guide does not specifically focus on mobile smart client applications, although many of the architectural issues and solutions that it discusses are relevant to smart devices.
To choose the right application architecture for your situation, you must consider a number of factors. To determine whether a smart client approach is the most suitable for your application, carefully consider your current and future business application needs. If your application is based on an unsuitable architecture, it may fail to meet the requirements and expectations of the users and the business as a whole. Changing the architecture later to meet new requirements or to take advantage of new opportunities may be extremely expensive.
A thin client architecture is often the most appropriate if you need to make an externally facing application available to a diverse external audience, while a smart client architecture is often the most suitable for an internal application that needs to integrate with or coordinate other client-side applications or hardware, or that is required to work offline or provide specific high-performance functionality through a responsive user interface.
In reality these two approaches overlap to a great extent, and each has distinct advantages and disadvantages. You will only be able to choose the right approach after you carefully consider your requirements and understand how each approach would apply in your situation. Use Table 1.1 to help you choose between a smart client and thin client architecture.
Table 1.1 Features of Thin Clients and Smart Clients
|Feature||Thin client||Smart client|
|Provides a rich user interface||Yes, but difficult to develop, test, and debug. Generally ties the application to a single browser.||Yes. Easier to develop, test, and debug.|
|Can take advantage of hardware resources on local computer||Yes, but only through COM components.||Yes|
|Can interact with other local applications||No||Yes|
|Can be multithreaded||No||Yes|
|Can function offline||No||Yes|
|Can perform well in low bandwidth and high latency environments||No||Yes|
|Easy to deploy||Yes||Varies. Difficulty depends on application requirements.|
|Low maintenance and change management costs||Yes||Varies. Costs depend on application requirements.|
|Can be deployed to a wide variety of clients with varying capabilities||Yes, although more complex thin clients may require a single browser.||Yes. Can be deployed on any platform that supports the .NET Framework (including the .NET Compact Framework).|
The architectural challenges of smart clients differ from those of thin clients, and you will need to account for them in your application design. The benefits of smart client applications are significant, but you can realize them only if you address these challenges appropriately.
Smart clients allow data and logic to be distributed to the client computer, whereas thin clients tend to keep the data and logic centralized on the Web server and other back-end services. Although the smart client approach allows you to make the application more efficient, with no round trips to the server to determine next steps, you need to consider that the application and its data are now more widely distributed than with thin client applications, and modify your design accordingly.
If you are implementing business rules on the client, you will need to update those rules as required, without updating the entire application. This may mean that you use differing mechanisms for updating the application and updating business rules within the application.
By caching data on the client, you can significantly improve the performance and usability of an application, but you must ensure that the data is refreshed appropriately and that stale data is not used. Because many users can access and use the same data, you must also consider the effects of data concurrency. Your application must be able to handle data conflicts or reconciliation issues that arise because the application is now more widely distributed and can operate while offline. Chapter 3: Getting Connected covers these issues in depth.
The .NET Framework provides a great deal of flexibility in how your smart client applications can be hosted. Applications can be run as traditional desktop applications or can be hosted within Office or Microsoft Internet Explorer. Many combinations are possible. For instance, a Windows Forms application can host Internet Explorer or Office components, and any host can subsume any other.
You can factor volatile application logic (for example, business rules governing volume order discounts) into assemblies that are downloaded on demand over HTTP. Doing so obviates the need to deploy new versions of the client application as new application logic is developed. You can use the same model for additional (or infrequently used) application features, so that initial application size is kept to a minimum, and additional features are installed on an as-needed basis.
You may choose to deploy your smart clients as composite applications, where many applications combine to form a coherent solution. Such solutions can be formed by coupling desktop applications, or by providing a generic shell application that houses multiple lightweight applications that together form the solution.
Composite applications are particularly useful in situations where users have to access many applications to do their work. For example, customer service agents in call centers typically have to work with many LOB applications, including desktop, browser-based, and terminal-based applications. All such LOB applications can be hosted within a generic Windows Forms application that provides integration between them, greatly simplifying the user's job and, most importantly, reducing the time spent on a particular call. By providing a generic shell to host these LOB applications, common infrastructure features, such as security, deployment, window management, application integration, auditing, and so on, can be developed, tested, and reused across different solutions, freeing the developers of the LOB applications to focus on business functionality.
The advent of service-oriented architectures means that you can design smart clients to make use of network services. All such services are provided in an industry-standard way, which improves interoperability, developer tool support, and the ease with which new features can be built into the smart client application.
This guide is focused on the architectural and design issues surrounding smart client applications built on the Microsoft .NET technologies. It assumes that you are building your smart client applications using the Microsoft .NET Framework and are using Microsoft .NET Windows Forms to build any user interface.
The guide does not cover implementation issues in depth. In particular, the details of implementing a smart client application on Microsoft Office 2003 or on a mobile device are not covered, although many of the issues covered in this guide are relevant to smart client applications — whether they are stand-alone Windows Forms, Office, or mobile device applications.
This guide is designed to be used in one of two ways. First, the guide is structured to provide a fairly comprehensive overview of the architectural and design issues you might face when building a smart client application. Reading the guide from start to finish will give you the fullest understanding of the issues you might face and how to overcome them.
Alternatively, if you prefer to delve into the issues surrounding a specific topic, you can read chapters individually for self-contained discussions of the relevant issues.
This guide is intended for software architects and developers who are developing smart client applications built on Microsoft .NET technologies.
To benefit fully from this guide, you should have an understanding of the following technologies and concepts:
- The Microsoft .NET Framework
- Microsoft Visual Studio .NET 2003 development tool
- Microsoft® Visual C#® development tool
- Extensible Markup Language (XML)
- Message Queuing (MSMQ)
- Relational database operation
- Distributed application design and architecture
Note For more information about distributed application design and architecture, see http://msdn.microsoft.com/en-us/library/aa292470(VS.71).aspx and http://msdn.microsoft.com/en-us/library/aa292478(VS.71).aspx.
This guide consists of the following chapters, each of which deals with a specific issue relevant to smart clients. Each chapter is designed to be read, in whole or in part, according to your needs.
This chapter gives a high-level description of smart client applications and describes some of their basic properties and benefits. It then discusses some of the high-level architectural issues and provides guidance to help you determine if a smart client architecture is right for your application.
In smart clients, application data is available on the client. This data needs to be managed appropriately to make sure that it is kept valid, consistent, and secure. If the data is provided by a server application, the smart client application may cache the data to improve performance or to enable offline usage. If your smart client application provides the ability to modify data locally, the client changes have to be synchronized with the server-side application at a later time. This chapter examines the various considerations for handling data on the client, including data caching, data concurrency, and the use of datasets and Windows Forms data binding.
Smart client applications often form one part of a larger distributed application, so they are frequently connected to a network and interact with network resources such as Web services, along with components or processes on the client computer itself. This chapter describes a number of ways in which your application can connect to and use these resources, and discusses the strengths and weaknesses of each.
This chapter contains a discussion of the issues you might face when designing and building smart client applications that are occasionally connected to the network. The chapter covers the concept of connectivity, describes the two main approaches to implementing offline capabilities, and discusses some of the things you need to consider to make your application available when offline.
This chapter covers the issues of smart client security. Smart clients distribute logic and data to the client computer; therefore, the security concerns are different from those associated with thin a client application, where data and logic are confined more to the server. This chapter discusses data security, authentication, authorization, and the role of code access security within a smart client application.
This chapter discusses the issues surrounding the use of multiple threads in a smart client application. To maximize the responsiveness of your smart client applications, you need to carefully consider how and when to use multiple threads. Threads can significantly improve the usability and performance of your application, but they require very careful consideration when you determine how they will interact with the user interface.
Smart clients do not suffer from the deployment and update problems traditionally associated with rich client applications. Features provided by the .NET Framework and the Windows platform help you to avoid many problems associated with traditional rich client deployment. This chapter describes how to best use these features and how to choose between the deployment and update mechanisms available.
Thin clients and smart clients can each be used to provide LOB applications to your organization. However, each type of client has its advantages and disadvantages. When designing your application, you will need to carefully consider the specifics of your situation before you can determine which is more appropriate. This chapter has explained how smart clients evolved and the features that are associated with them. You can now use the rest of this guide to help you determine how to design and implement smart clients in your own organization.
The following resources provide more information about patterns & practices, smart clients, and other application blocks that you can use to find specific guidance.
- patterns & practices Web site at http://msdn.microsoft.com/en-us/practices/default.aspx
- Patterns and Practices Library
- Overview of Smart Client Applications in the Microsoft Office System on MSDN® at http://msdn.microsoft.com/en-us/library/aa163619(office.10).aspx
- Application Architecture for .NET: Designing Applications and Services on MSDN at http://msdn.microsoft.com/en-us/library/ms954595.aspx