WPF技术概述

WPF全称为Windows Presentation Foundation,是一种基于XAML、.NET和向量绘图技术的表层开发框架,广泛用于软件图形界面的开发,是一种专门用来编写程序表示层的技术和工具。

三层架构

在WPF(Windows Presentation Foundation)中,应用程序通常被划分为三层架构:UI Layer、Business Layer 和 Network Layer。每层都有其特定的功能和作用。

UI Layer(用户界面层):

负责显示应用程序的图形用户界面(GUI),包括窗体、控件和布局。
使用XAML定义界面元素和样式,使用C#或VB.NET编写用户交互逻辑。
处理用户的交互操作,如点击按钮、输入文本等。

Business Layer(业务逻辑层):

负责应用程序的核心功能和数据管理,与数据库交互执行查询和更新操作。
使用Entity Framework进行ORM,提供 fluent API 或 WLINQ实现业务逻辑。
处理事务控制、错误处理和状态管理,确保数据的一致性和完整性。

Network Layer(网络层):

负责数据的传输和通信,从客户端发送请求到服务器或从服务器返回响应。
使用.NET Core或其他网络库如DotNet/Transport、Netty或GlassFish实现网络功能。
处理HTTP请求的生命周期,包括解析、数据传输、响应生成和错误处理。

通过这三层架构的设计,WPF使得应用程序结构清晰、功能分明。UI Layer展示用户界面,Business Layer管理核心业务逻辑,Network Layer负责数据通信。各层之间相互关联,共同支撑整个应用的运行。理解和实现这三层架构是掌握WPF开发的关键。

高内聚,低耦合

“高内聚,低耦合”是一个软件设计模式中的核心概念,尤其是在遵循“开闭原则”时被广泛采用。这种设计理念强调使系统中的各个组件或部分之间的依赖尽可能少(低耦合),同时在每个组件内部实现功能的集中和独立(高内聚)。在WPF(Windows Presentation Foundation)中的三层架构中,“高内聚,低耦合”体现在以下几个方面:

1. 高内聚(High Cohesion)

每一层的功能模块都被高度集中,其职责范围明确且相互之间依赖较少。具体来说:

  • UI Layer:负责显示和管理用户界面,包括窗体、控件、布局等。它的核心功能是展示图形内容,与其他层的交互主要通过中间层(如ViewModel)。
  • Business Layer:负责应用的核心业务逻辑,如数据处理、事务管理、业务流程等。它依赖ORM(Object-Relational Mapping)技术与数据库交互,但对其它层的关系有限。
  • Network Layer:专注于数据传输和通信,处理HTTP请求、数据发送/接收、认证等操作。这部分通常使用现成的库或框架来实现。
  • 由于每一层的功能都非常集中,彼此之间的依赖关系弱,高内聚特性得以体现。


    2. 低耦合(Low Coupling)

    各层之间的依赖关系尽可能少,相互之间几乎独立。具体来说:

  • UI Layer:与Business Layer和Network Layer之间的依赖仅限于中间层(如ViewModel或ViewModelBase),这些中间层负责传递数据和控制流。
  • Business Layer:与UI和Network Layer之间的依赖也主要通过中间层实现,例如通过集合或事件来同步UI的变化。
  • Network Layer:通常与其他两层的交互非常有限,主要处理本层特定的功能。
  • 低耦合特性使得每一层可以独立地被修改、升级或替换,而不会影响到整个系统的功能。


    三层架构在“高内聚,低耦合”中的体现

    在WPF的三层架构中,“高内聚,低耦合”的特点具体体现在以下几个方面:

      UI Layer:
    1. 高内聚:仅负责显示和管理用户界面,与其他层的交互通过ViewModel或ViewModelBase实现。
    2. 低耦合:与业务逻辑(如数据查询)和网络操作之间的依赖关系非常弱。
      Business Layer:
    1. 高内聚:主要负责应用的核心业务逻辑,如数据处理、事务管理等。它依赖ORM技术将数据库表映射到实体类,并通过中间层传递数据。
    2. 低耦合:与其他两层的依赖有限,通常通过ViewModel或ViewModelBase与UI Layer交互。
      Network Layer:P
    1. 高内聚:专注于数据传输和通信,处理HTTP请求、数据发送/接收等操作。这部分功能较为独立,与其他层的依赖较少。
    2. 低耦合:与UI和业务层之间的交互主要通过中间层实现(如HttpBinding框架),不影响其核心逻辑。

    总结

    在WPF的三层架构中,“高内聚,低耦合”的设计原则确保了各层功能的独立性和模块化。这种设计方式的优势在于:

    易于维护:每一层的功能清晰明确,可以独立地进行修改或升级。
    扩展性强:新增功能时,只需在特定层中实现即可,无需影响其他层。
    可重用性高:各层的设计较为通用,适合多种应用场景。
    通过“高内聚,低耦合”的设计思想,WPF的三层架构实现了高效、稳定且易于维护的应用开发。

    数据交互容器与载体

    1. 数据容器

    数据容器是指提供统一数据访问策略的组件或类,它负责将业务逻辑层、ViewModel(视图模型)和数据源连接起来。在WPF中,数据容器通常是一个自定义的数据访问接口或组件,用于管理与不同数据源(如数据库、云存储等)的交互。

    数据容器的主要职责包括:

  • 定义与数据源的交互规则(如序列化/反序列化规则、过滤规则等)。
  • 管理多个数据源之间的切换和协作。
  • 提供数据访问权限,确保不同组件可以安全地访问数据源。
  • 示例:

    在WPF中,数据容器可能是一个自定义的类或组件(如 DataContext 或 DataContextComp),它包含了对数据源的操作逻辑,并将这些操作与业务逻辑层和ViewModel结合在一起。

    1. 载体

    载体是指在视图模型(ViewModel)中使用桥梁(Bridge)将业务逻辑层的数据操作映射到数据容器的逻辑。载体负责通过桥梁将业务逻辑的操作结果传递给数据容器,或者从数据容器获取数据并返回给业务逻辑。

    在WPF中,载体通常是一个自定义的组件或类,它包含了对桥梁(如 ILookupBridge、IlooDataAccessBridge)的引用,并负责管理与数据源的交互。载体将业务逻辑和数据源连接起来,确保数据操作的正确性和一致性。

    示例:

    载体可能是一个自定义的组件或类(如 UserDetailBridge),它包含了对桥梁的引用,并通过桥梁将用户的搜索结果传递给数据容器(如 DataContext 或 DataContextComp)。

    1. IlooDataAccessBridge

    在WPF中,IlooDataAccessBridge 是一个重要的桥梁接口,用于实现业务逻辑层与数据源之间的交互。它通过以下方式将业务逻辑和数据容器连接起来:

  • 定义如何从数据源获取数据(如查询、更新等)。
  • 定义如何将业务逻辑操作的结果映射到数据容器的逻辑中。
  • 提供数据的序列化和反序列化功能。
  • 示例:

    在 UserDetailBridge 中,你可以定义一个方法来查询数据库中的用户信息:

    1
    2
    3
    4
    5
    6
    7
    public class UserDetailBridge implements IlooDataAccessBridge<User, IDetailsUser> {
    private readonly IBridgeBridge bridge;

    public bool GetUserInfo(int userId) {
    return await bridge.ExecuteScalar("SELECT * FROM Users WHERE Id = ? ", userId);
    }
    }
    1. 数据容器与载体的关系

      数据容器和载体在WPF中通常结合使用,以实现高效的业务逻辑操作。具体关系如下:

    数据容器负责管理与数据源的交互策略(如序列化、反序列化规则)。
    载体(通过桥梁)将业务逻辑的操作结果传递给数据容器,并从数据容器获取数据。

    示例:

    在WPF中,数据容器和载体可能结合在一起使用如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class UserDetailBridge implements IlooDataAccessBridge<User, IDetailsUser> {
    private readonly IBridgeBridge bridge;
    private readonly DataContext dataContext;

    public bool GetUserInfo(int userId) {
    return await bridge.ExecuteScalar("SELECT * FROM Users WHERE Id = ? ", userId);
    }
    }

    public class UserDetailContainer : IlooDataContextComp<IDetailsUser> {
    public UserDetailContainer(IBridgeBridge bridge) {
    if (bridge != null)
    bridge.SetBridge(bridge);
    }
    }
    1. 总结

    数据容器:提供统一的策略和管理逻辑,将业务逻辑与数据源连接起来。
    载体:通过桥梁将业务逻辑的操作结果传递给数据容器,并从数据容器获取数据。
    IlooDataAccessBridge:是实现业务逻辑层与数据源交互的核心桥梁。
    通过合理使用这些组件,可以更好地组织WPF应用的代码结构,提高数据访问的效率和可维护性。