在本文中,将探讨一个名为Northwind Traders的虚构公司的客户管理系统。该系统是一个蓝图,用于展示如何使用.NET 3.5技术,如WPF(Windows Presentation Foundation)、WCF(Windows Communication Foundation)和LINQ to SQL,构建一个企业级标准架构。这个系统可以作为构建具有面向服务和分布式架构的可靠应用程序的参考。
作为蓝图应用程序,其功能仅限于演示应用程序中典型的操作单元。当应用程序启动时,主窗口会打开,上面有一组按钮。点击“加载”按钮将从数据库加载所有客户。
可以通过点击“新建”按钮来添加新客户,这将打开一个弹出窗口以添加客户详细信息。通过点击“编辑”按钮可以编辑选定的客户,或者通过点击“删除”按钮来删除客户。“编辑”按钮将打开弹出窗口,加载客户的现有详细信息。“关闭”按钮将关闭应用程序。
该应用程序遵循n层架构模式,具有不同的逻辑和物理层,如下图所示:
Windows Presentation Foundation(WPF)用于表示层。WPF为构建丰富的Windows智能客户端用户体验提供了统一的编程模型。
应用程序的用户界面由使用XAML定义的窗口和页面组成。构成用户界面的所有用户控件、图像、样式和其他资源都将是这一层的一部分。控件绑定到在单独组件中定义的命令。命令组件将具有指向服务层公开的服务的代理类作为服务引用。
Windows Communication Foundation(WCF)用作表示层和业务逻辑层之间的通信接口。服务层由服务合同接口和公开服务的主机组成。
业务逻辑层实现为.NET 3.5中的一组程序集(DLL)。这一层将抽象出业务所需的业务规则的实现。
用于跨层传输数据的业务实体类使用序列化属性进行装饰。
该层提供了抽象与数据库交互的函数。
Language Integrated Query(LINQ)(特别是LINQ to SQL)用于数据访问层从数据库访问数据。有一个DataHelper类封装了LINQ to SQL数据上下文的管理。所有数据访问类将通过DataHelper类将LINQ查询传递给数据上下文。LINQ实体用于保存数据,并在传递给上层之前转换为业务实体。
核心服务独立于业务功能,存在是为了提供基本的基础设施支持。它提供可重用性,并支持诸如错误处理、日志记录、事务管理等常见功能。此组件的服务在所有层中使用。
该应用程序将只有一个中央数据库,它将位于SQL Server 2005数据库服务器上。数据库将只有表格来保存数据,数据库对象内不会实现业务逻辑。
所有这些层都实现为单独的项目,如下图所示:
该应用程序包括一个异常处理和日志记录机制,如下所述。在Northwind.Common中使用自定义异常类来管理应用程序的异常。自定义异常有助于标准化处理、记录和报告异常的方式。所有异常都被捕获,并用作创建自定义异常的起点。此外,自定义异常可以包含任何其他有用信息。通过自定义异常中的自定义调用堆栈捕获异常通过调用堆栈的路径。这有助于避免默认异常类提供的众多跟踪,并专注于仅需要的信息。
在发生异常时,有时需要将消息记录为信息。这在异常不影响应用程序流程时很有用,但仍然想知道出了什么问题。这里实现的机制还提供了记录信息消息而不是抛出异常的选项。