企业应用程序架构:在 .NET 中设计应用程序和服务 - 第一部分






4.71/5 (43投票s)
对 .NET 中分布式企业应用程序设计的指导性介绍
引言
本文旨在展示如何从头开始在 .NET Framework 中实现分布式应用程序。事实上,我可以分享我的经验,希望对架构师(显然是架构设计新手)或想成为架构师的开发人员有所帮助。该应用程序将包含一个简单的 Web 客户端 CustomerOrderManagement
系统,以及我们自己的分布式应用程序平台。
该应用程序将涵盖以下部分:
- 第一部分 (分布式应用程序层及项目细节):了解分布式环境中的分层设计,以及在实际应用中我们将如何命名它。
- 第二部分 (数据库和库设计):了解数据库设计以及实现与 Edmx 容器交互的库。
- 第三部分 (引擎和服务管理器设计):了解如何实现包含核心业务逻辑的引擎,以及如何实现带有服务协约的实际 WCF 服务,同时还介绍如何使用测试客户端测试服务。
- 第四部分 (客户端实现):了解如何使用 MVVM 模式实现调用服务的实际客户端。
我会尽快发布剩余的部分。
必备组件
为了运行 WCF 服务、数据库设计和 Silverlight 应用程序,您需要 .NET Framework 3.0 或更高版本。Windows Vista 默认安装了 .NET Framework v3.0,因此只有在安装了 Windows XP SP2 的情况下才需要安装它。要开发分布式企业应用程序,您应该拥有 Visual Studio 2008 或更高版本的 Visual Studio、SQL Server Management Studio Express 2005 以及 Windows SDK。文章来源使用了 VS2010 和 SQL Server Management Studio Express 2005。
为什么我应该阅读这篇文章?
看到这篇文章的标题时,您可能会问这个问题。如果您是一位架构师或有志于成为架构师的开发人员,请花一些时间阅读本文(抱歉占用了您宝贵的时间)。完成本文后,您会觉得可以轻松设计任何复杂的应用程序。我对此非常确定。但是,我不会深入探讨设计原则。如果您想了解,可以从 Microsoft 网站学习,该网站清晰地描述了所有内容。在我看来,一遍又一遍地在理论上描述概念而不进行实际实现是没有意义的。因此,我将直接描述如何在实际操作中完成,以及为何以及如何做。我一直喜欢行动而不是阅读行动故事 :)。设计复杂的应用程序并非易事。众所周知,需要在架构、设计和实现级别做出许多决策。这些决策将影响应用程序的安全性、可伸缩性、可维护性和可用性。本文将帮助您从头开始设计应用程序,清晰地分离数据层、业务层、服务层和表示层等层。让我们开始行动吧。
这些层是什么?它们应该提供什么?
让我们从访问每个层开始,讨论这些层应该提供什么,不应该提供什么。图 1 显示了本文用于设计架构的简化的逻辑组件层。我不会在这里包含许多组件。只需查看图 1,即可立即理解本文的目的。
- 表示层 - 包含与用户相关的、用于管理用户与系统交互的功能,通常包括用于通过服务层与业务逻辑通信的服务调用。
- 服务层 - 由服务协约和消息类型组成,用于与业务逻辑通信,以将业务层分离为独立的层。此外,此层可以位于不同的层上,或者可以驻留在同一层上。
- 业务层 - 此层实现系统的核心功能,并封装相关的业务逻辑。它通常由组件组成,其中一些组件可以公开服务接口供其他调用者使用。
- 数据访问层 - 此层使用其自身的上下文与数据库通信,以在数据库中检索和保存数据。此数据访问层公开业务层中的组件可以使用的通用接口。
- 数据层 - 此层包含实际的业务原始数据。 DBA 可以设计和维护此层。
我们如何实现?使用什么技术?
让我们以图 1 为基础,添加另一张图来描述如何从头开始实现客户订单管理企业应用程序。在开始讨论之前,我将从这些层中考虑一些组件作为平台。因为这个平台可以托管在任何地方,客户端可以通过网络消费他们需要的任何东西。这被称为分布式环境。在这里,我们将业务层、服务层和数据访问层视为一个单一平台。因此,多个客户端平台(移动、Web 等)可以利用我们的 COMS(CustomerOrderManagement
系统)。这是我们 COMS 的主要优势。查看图 2,了解我们将如何使用技术细节实现我们的 COMS 平台。
注意:请注意,在整篇文章中,COMS 指的是 CustomerOrderManagement
系统。
- 服务库 (数据访问层) - 这通过 edmx 实体容器与实体框架交互,并为服务引擎提供数据。我们将在进行库实现时详细讨论这一点。
- 服务引擎 (业务层) - 这包含核心业务逻辑实现,并与服务库交互以获取实际数据,而无需直接联系数据库。所有业务验证都应在此处实现以实现可扩展性。我们将在进行引擎实现时详细讨论这一点。
- 服务管理器 (服务层) - 此层将所有 COMS 系统功能公开为 WCF 服务,任何平台上的客户端都可以访问这些服务。管理器从不直接与数据库或库交互。因为业务层包含所有需要在将响应发送给客户端之前调用的验证。我们将在进行服务管理器实现时详细讨论这一点。
- 客户端 (表示层) - 实际的用户界面,用于调用服务。这可以是任何富客户端、Web 客户端、移动客户端或其他服务调用。我将在本文中使用 Silverlight 来实现 Web 客户端。如果可能,我将尝试在本文中发布一些移动 UI 实现,以测试我们的 COMS 平台。
坦白说,我对移动应用实现不太了解,所以我会学习并在其中一个部分讲解如何利用我们的 COMS 平台服务在移动平台上。但是,您必须相信我,并等待几周:)
历史
- 本文初版于 2010 年 9 月 20 日
- 发布于 2010 年 9 月 21 日
- 第二部分链接于 2010 年 9 月 27 日更新