具有同质层结构的层状应用程序架构





5.00/5 (1投票)
本文描述了具有同质层结构的应用程序分层架构。
引言
本文是对文章“基于子层集和数据模型层级结构的分层应用程序架构示例”的进一步发展。
应用程序接口
一般来说,应用程序可以与外部使用者集和外部数据源集进行交互。外部使用者执行数据使用者和/或数据生产者的功能。外部数据源执行数据使用者和/或数据生产者的功能。
要构建分层架构,必须定义应用程序边界。
应用程序的上边界界定了应用程序的功能区域和外部使用者的区域。应用程序的下边界界定了应用程序功能区域和外部数据源的区域。
利用应用程序边界的概念,可以定义应用程序接口。
应用程序输入接口位于应用程序的上边界。应用程序输入接口是应用程序功能与外部使用者交互的网关。应用程序输入接口的例子是可视化界面(由一组可视化窗体组成)和数据传输接口(由一组服务器端终结点组成)。
如果应用程序不与外部使用者进行交互,则应用程序输入接口是内部接口,它由一组定时器和/或内部应用程序计划组成。
当外部使用者发生事件时,应用程序输入接口与应用程序功能进行交互。
外部数据源可以分为两种类型:本地数据源和远程数据源。
应用程序直接与本地数据源交互,无需使用驱动程序和软件库。本地数据源的例子是本地文件和本地网络上的共享文件、USB/COM/LPT 端口。
应用程序输出接口位于应用程序的下边界。应用程序输出接口是应用程序功能与远程数据源交互的网关。应用程序输出接口的组成部分是客户端套接字、与 Web 服务交互的代理对象、数据库驱动程序和外部设备驱动程序。远程数据源的例子是服务器和桌面数据库、FTP 服务器、目录服务(LDAP、Active Directory)、电子邮件和文档存储系统。
应用程序层的同质结构
分层应用程序架构可以表示为一组具有同质结构的层。每层由一组子层组成。多层应用程序由一组相互交互的多层应用程序组成。任何应用程序都可以表示为单层或多层应用程序,其中每个层都是一个多层应用程序。
分层架构基于每层的同质结构以及层之间的分层交互。
应用程序层由层功能和层数据组成。层功能由操作和事件组成。层数据组织成一组数据模型。
应用程序层的同质性意味着任何层的结构都具有相同的子层集,并且子层之间的交互方案相同。
层之间的交互分层
- 相邻层之间以及同一层子层之间的交互是单向的
- 层数据模型之间的数据交换是双向的
子层由子层 API 组成,该 API 可从上层或子层访问,以及内部子层功能。子层 API 由一组子层操作组成。
考虑层集、应用程序边界和应用程序接口的完整单层应用程序结构图如图 4 所示。
任何应用程序层的外观子层都提供从上层访问层功能的接口。
外观层的外观子层是可视化窗体事件处理器的集合或前端控制器的集合。
逻辑层的外观子层实现了应用程序逻辑,该逻辑协调业务逻辑操作的执行和外部数据的处理。
持久化层的外观子层是一组外部数据访问对象。
任何应用程序层的逻辑子层都实现了该层的内部逻辑。逻辑层的逻辑子层实现了应用程序的业务逻辑(领域逻辑)。
任何应用程序层的数据访问子层都实现了对外部数据的访问。对于持久化层,访问和处理外部数据是主要任务。对于外观层和逻辑层,有三种方法可以访问外部数据源
- 直接访问本地数据源(本地文件和本地网络中的共享文件)
- 通过应用程序输出接口访问(访问目录服务、电子邮件和文档存储系统)
- 通过持久化层访问(访问关系数据库)
应用程序层和子层的结构和内容描述
表格显示了应用程序层和子层内容的示例。
子层 | 命名空间/包 | 注释 |
应用程序输入接口 | ||
可视化界面 | 可视化窗体集 | |
数据传输接口 | 服务器端终结点集 | |
内部接口 | 内部应用程序计划,定时器集 | |
外观层 | ||
外观子层 | [FacadeRoot].Facade.Forms | 可视化界面事件处理器的集合(适用于具有可视化界面的应用程序) |
[FacadeRoot].Facade.Controllers | 前端控制器的集合(适用于 Web 服务、ASP.NET MVC 应用程序) | |
[FacadeRoot].Facade.Timers | 定时器 Tick 事件处理器的集合 | |
逻辑子层 | [FacadeRoot].Logic.Internal.Services.PresentationLogicServices | 适用于具有可视化界面的应用程序的表示逻辑 |
[FacadeRoot].Logic.Internal.Services.InteractionLogicServices | 适用于 Web 服务的内部逻辑 | |
数据访问子层 | [FacadeRoot].Logic.External.Services.PersistenceServices | 命令/查询操作 |
[FacadeRoot].Logic.External.Services.NotificationServices | 通知操作 | |
[FacadeRoot].Logic.External.Services.DataTransferServices | 数据传输操作 | |
逻辑层 | ||
外观子层 | [LogicRoot].Facade.Handlers | 应用程序逻辑 |
[LogicRoot].Facade.UnitOfWorks | ||
逻辑子层 | [LogicRoot].Logic.Internal.Services.DomainServices | 领域逻辑 |
数据访问子层 | [LogicRoot].Logic.External.Services.PersistenceServices | 命令/查询操作 |
[LogicRoot].Logic.External.Services.NotificationServices | 通知操作 | |
[LogicRoot].Logic.External.Services.DataTransferServices | 数据传输操作 | |
持久化层 | ||
外观子层 | [PersistenceRoot].Facade.DataAccessObjects | 外部数据访问对象 |
逻辑子层 | [PersistenceRoot].Logic.Internal.Services.InternalLogicServices | |
数据访问子层 | [PersistenceRoot].Logic.External.Data.PersistenceManagers | 使用直接 SQL 查询时 |
[PersistenceRoot].Logic.External.Data.DatabaseContexts | 使用 ORM 框架时 | |
[PersistenceRoot].Logic.External.Data.EntityManagers | 使用 ORM 框架时 | |
[PersistenceRoot].Logic.External.Connections.DatabaseConnections |
历史
- 2021 年 11 月 15 日:初始版本