65.9K
CodeProject 正在变化。 阅读更多。
Home

Northwind N-Tier 蓝图应用程序使用 WPF/WCF/LINQ to SQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.41/5 (16投票s)

2014年2月5日

CPOL

4分钟阅读

viewsIcon

58668

downloadIcon

2390

一个蓝图应用程序,用于展示使用 .NET 3.5 技术(如 WPF、WCF 和 LINQ to SQL)的企业级标准架构。

引言

Northwind N-Tier 蓝图是一个 Windows 客户端应用程序,可用于管理虚构公司 Northwind Traders 的客户及其详细信息。此应用程序被开发为一个蓝图,用于展示使用 .NET 3.5 技术(如 WPF、WCF 和 LINQ to SQL)的企业级标准架构。它可以作为构建具有面向服务和分布式架构的可靠应用程序的参考。

应用程序功能

由于这是一个蓝图应用程序,其功能仅限于演示应用程序中典型操作单元所需的功能。启动应用程序时,主窗口会显示一组按钮。单击“加载”按钮将从数据库加载所有客户。

NorthwindNTierBlueprint/applicationscreen.jpg

可以通过单击“新建”按钮添加新客户,这将打开一个弹出窗口来添加客户的详细信息。可以通过单击“编辑”按钮编辑选定的客户,或通过单击“删除”按钮删除。 “编辑”按钮将打开弹出窗口,加载客户的现有详细信息。“关闭”按钮将关闭应用程序。

应用程序架构

此应用程序遵循 n 层架构模式,具有不同的逻辑层和物理层,如下图所示:

NorthwindNTierBlueprint/northwindblueprintarchitecture.jpg

表示层

Windows Presentation FoundationWPF,它提供了一个统一的编程模型,用于构建丰富的 Windows 智能客户端用户体验,用于表示层。

此应用程序的用户界面由使用 XAML 定义的窗口和页面组成。构成用户界面的所有用户控件、图像、样式和其他资源都将是此层的一部分。控件绑定到定义在单独组件中的命令。命令组件将具有代理类作为服务引用,指向服务层公开的服务。

服务层

Windows Communication FoundationWCF 用作表示层和业务逻辑层之间的通信接口。服务层由服务契约接口和一个公开服务的宿主组成。

业务逻辑层

业务逻辑层作为 .NET 3.5 中的一组程序集 (DLL) 实现。该层将抽象业务所需的业务规则的实现。

使用带有序列化属性装饰的业务实体类来跨层传输数据。

数据访问层

此层提供抽象数据库交互功能的函数。Language Integrated QueryLINQ(特别是 LINQ to SQL)用于数据访问层,以从数据库访问数据。有一个 DataHelper 类封装了 LINQ to SQL 数据上下文的管理。所有数据访问类都将通过 DataHelper 类将 LINQ 查询传递给数据上下文。LINQ 实体用于保存数据,并在传递到上层之前将其转换为业务实体。

核心服务

核心服务独立于业务功能,用于提供基本的基础设施支持。它提供可重用性,并支持错误处理、日志记录、事务管理等通用功能。此组件的服务在所有层中使用。

数据库服务器

此应用程序将只有一个中央数据库,它将驻留在 SQL Server 2005 数据库服务器上。数据库将只包含用于存储数据的表,并且不会在数据库对象中实现任何业务逻辑。

所有这些层都实现了为单独的项目,如下一张图所示:

NorthwindNTierBlueprint/projectstructure.jpg

异常处理和日志记录

此应用程序包含一个如下所述的异常处理和日志记录机制。使用自定义异常类(在 Northwind.Common 中)来管理此应用程序的异常。自定义异常有助于我们标准化异常的处理、记录和报告方式。所有异常都会被捕获,并用作创建自定义异常的起点。此外,自定义异常还可以包含任何其他有用的信息。通过自定义异常中的自定义调用堆栈可以捕获异常在调用堆栈中经过的路径。这有助于避免默认异常类提供的所有繁琐的跟踪,并专注于仅需要的信息。

在某些情况下,需要在发生异常时将消息记录为信息。当异常不影响应用程序流程,但我们仍希望知道有问题发生时,这很有用。此处实现的机制还提供了一个选项,可以选择记录信息性消息而不是抛出异常。

所有异常都会传播到 UI 层,并向最终用户显示友好消息。还有一个选项可以显示包括堆栈跟踪在内的错误详细信息。所有异常都从服务层记录到数据库中的错误表中。如果数据库访问本身失败,异常将被记录到应用程序服务器中的日志文件中。如果文件访问也失败,它们将被记录到应用程序服务器的事件日志中。

历史

  • 初始版本。
© . All rights reserved.