欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

程序员文章站 2022-06-09 12:59:04
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建、登录日志和操作审计日志、字典管理模块、省份城市的信息维护、权限管理模块中的组织机构、用户、角色、权限、菜单等内容,以及配置管理模块,界面的高级查询处理等内容,同时我们把整个开发理念结合我们的代码生成工具Data... ......

前面介绍了很多abp系列的文章,一步一步的把我们日常开发中涉及到的web api服务构建、登录日志和操作审计日志、字典管理模块、省份城市的信息维护、权限管理模块中的组织机构、用户、角色、权限、菜单等内容,以及配置管理模块,界面的高级查询处理等内容,同时我们把整个开发理念结合我们的代码生成工具database2sharp进行快速的开发,快速开发分为两个部分:一个是web api部分的abp框架代码生成,包括领域实体层、应用服务层、公用dto和接口层、api调用caller层等内容的生成,并且整合了我们封装的基类,以便生成的代码更加简洁,但却具有更加强大、易用的功能函数;另一个快速生成的部分是界面生成,我们根据我们在winform领域多年的开发,整合了分页、公用类库和winform基础界面类的基础上实现了快速的winform界面生成,并且winform界面生成可以根据需要配置列表查询条件、列表显示内容,编辑界面的字段显示等等内容,并且生成的winform界面自动具有和abp快速框架整体调用通用规则。

1、abp框架背景知识介绍

abp是asp.net boilerplate的简称,abp是一个开源且文档友好的应用程序框架。abp不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(ddd)的体系结构模型。学习使用abp框架也有一段时间了,一直想全面了解下这个框架的整个来龙去脉,并把想把它使用历程整理成一个系列出来,不过一直没有下笔来写这篇文章的开篇,就是希望能够深入了解,再深入了解一些,希望自己能够理解透彻一些,不能误人子弟,也不想和网上千篇一律的翻译官网的内容,官网的英文介绍也已经很详细了,于是我觉得还是以实际使用的过程进行一定的整理会更好。

初次了解abp框架,对它还是非常惊艳的,它基本上是.net 领域架构的集大成者,几乎囊括了我们.net领域排的上名的各种技术应用,而且它本身可以支持.net framework和.net core两种技术流派,对它的介绍也是非常感兴趣。

1)abp框架的特点

我们来大概了解下abp框架涉及到的内容。

  • 依赖注入,这个部分使用 castle windsor (依赖注入容器)来实现依赖注入,这个也是我们经常使用ioc来处理的方式;
  • repository仓储模式,已实现了entity framework、nhibernate、mangodb、内存数据库等,仓储模式可以快速实现对数据接口的调用;
  • 身份验证与授权管理,可以使用声明特性的方式对用户是否登录,或者接口的权限进行验证,可以通过一个很细粒度的方式,对各个接口的调用权限进行设置;
  • 数据有效性验证,abp自动对接口的输入参数对象进行非空判断,并且可以根据属性的申请信息对属性的有效性进行校验;
  • 审计日志记录,也就是记录我们对每个接口的调用记录,以及对记录的创建、修改、删除人员进行记录等处理;
  • unit of work工作单元模式,为应用层和仓储层的方法自动实现数据库事务,默认所有应用服务层的接口,都是以工作单元方式运行,即使它们调用了不同的存储对象处理,都是处于一个事务的逻辑里面;
  • 异常处理,abp框架提供了一整套比较完善的流程处理操作,可以很方便的对异常进行进行记录和传递;
  • 日志记录,我么可以利用log4net进行常规的日志记录,方便我们跟踪程序处理信息和错误信息;
  • 多语言/本地化支持,abp框架对多语言的处理也是比较友好的,提供了对xml、json语言信息的配置处理;
  • auto mapping自动映射,这个是abp的很重要的对象隔离概念,通过使用automaper来实现域对象和dto对象的属性映射,可以隔离两者的逻辑关系,但是又能轻松实现属性信息的赋值;
  • 动态web api层,利用这个动态处理,可以把application service 直接发布为web api层,而不需要在累赘的为每个业务对象手工创建一个web api的控制器,非常方便;
  • 动态javascript的ajax代理处理,可以自动创建javascript 的代理层来更方便使用web api,这个在web层使用。

除了这些重要特性外,abp框架还有很多一些特别的功能或者概念。

  • 多租户支持(每个租户的数据自动隔离,业务模块开发者不需要在保存和查询数据时写相应代码;
  • 软删除支持(继承相应的基类或实现相应接口,会自动实现软删除)
  • 系统设置存取管理(系统级、租户级、用户级,作用范围自动管理)
  • eventbus实现领域事件(domain events)
  • 模块以及模块的依赖关系实现插件化的模块处理等等

abp框架主要还是基于领域驱动的理念来构建整个架构的,其中领域驱动包含的概念有 域对象entities、仓储对象repositories、域服务接口层domain services、域事件domain events、应用服务接口application services、数据传输对象dtos等。

abp官方网站:http://www.aspnetboilerplate.com,从里面可以查看很详细的案例和文档说明,可以根据需要下载不同类型的基础框架。

abp github源码地址:https://github.com/aspnetboilerplate,可以下载整个基础的框架内容,以及相关的样板案例代码。

 

基于abp框架基础上,我们整理完善了整个权限体系,以及基于这个基础上进行的业务系统快速开发,我们整理后的abp快速开发框架的架构图示,如下图所示(以字典模块为例说明)

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

针对web api接口调用的封装,为了适应客户端快速调用的目的,这个封装作为一个独立的封装层,以方便各个模块之间进行共同调用。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

2、基于winform的abp快速开发框架功能介绍

1)登陆界面

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

2)主体框架界面

主体框架界面采用的是基于菜单的动态生成,以及多文档的界面布局,具有非常好的美观性和易用性。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

左侧的功能树列表和顶部的菜单模块,可以根据角色拥有的权限进行动态构建,不同的角色具有不同的菜单功能点,如下是测试用户登录后具有的界面。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

3)用户管理界面

用户列表包括分页查询、导入、导出用户数据,以及可以利用右键菜单进行新增、编辑用户记录,或者对指定用户进行重置密码操作。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

用户编辑界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

当然可以查看这个用户本身拥有的权限功能点,如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

用户数据导入 ,可以根据指定模板的格式进行填写后,然后导入指定的文件内容,如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

导出文件则是把列表中现有的数据进行导入,导出后提示是否打开excel文件进行查看。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

4)组织机构管理

组织机构主要就是一个层级的对象关系,一般包含但不限于公司、部门、工作组等的定义,其中组织机构包含用户成员和角色成员的关系,如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

组织机构的树形列表可以进行拖动实现不同层级的变化

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

或者通过右键菜单进行编辑修改操作

 ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

组织机构可以修改机构名称和对应的父类节点,如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

组织机构包含的成员可以添加多个人员记录,添加界面如下所示。

 ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

添加角色界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

5)角色管理

角色信息没有层级关系,可以通过列表展示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

其中角色包含权限分配、角色成员和拥有菜单的维护,如下是角色编辑界面,包含角色基本信息、拥有权限、包含成员、拥有菜单的管理等。菜单对于角色来说,应该是一种界面资源,可以通过配置进行管理对应角色用户的菜单。

菜单编辑界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

角色的权限包含系统可以用的权限,并可以勾选为角色设置所需的功能点,如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

用户成员则和机构的用户管理一样,可以指定多个用户,这里不再赘述。

而菜单对于角色来说,应该是一种界面资源,可以通过配置进行管理对应角色用户的菜单,如下界面所示。

通过配置好的菜单,用户登录系统后,系统根据当前用户具有的菜单项目,动态构建显示对应的列表菜单和工具栏菜单。

 ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

6)功能管理

 严格来说,abp框架并没有统一管理好权限功能点的,它没有任何表来存储这个功能集合,而是通过派生authorizationprovider的子类来定义权限功能点

我在这个基础上引入了一个权限功能的表用来存储功能点的,然后提供管理界面来动态维护这些功能点。如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

我们刚才在角色里面看到可以分配的权限内容,就是基于这个权限表的信息展示。

这样我们可以动态添加或者批量添加所需要的功能点,并且和整个权限管理模块串联起来,形成一个完整的控制体系。

 ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

另外我们还可以通过左侧树列表的右键菜单管理列表,如下所示可以级联删除对应的节点及其下面所有子节点。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

系统登录后,客户端自动获取对应用户的角色功能点,然后我们每次打开一个新的业务窗体,客户端会进行界面的权限逻辑控制,如果没有权限的,那么不可以访问操作,如下是禁止了产品信息的导入、导出、新增、编辑等操作功能,如下界面所示产品界面被动态取消相关权限后,界面禁止了某些操作功能。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

7)菜单管理

winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一二级菜单,这种方式在一般功能点不算太多的情况下,呈现的界面效果较为直观、也较为美观。不过随着一些系统功能的增多,这种方式可能就会显得工具栏比较拥挤,那么我们是否可以在左侧放置一个树形列表,这样通过树形列表的收缩折叠,就可以放置非常多的菜单功能了。

在abp快速开发框架里面,我们依旧采用winform开发框架里面用到的菜单维护方式,在权限模块系统中维护菜单内容,并在用户登录系统后,动态加载菜单展示,并通过菜单的配置信息,可以动态展示不同的窗体信息。

菜单资源管理的列表界面界面如下所示

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

左侧列表依旧可以通过右键菜单进行维护管理。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

双击树列表或者右侧的列表,都可以对已有的菜单进行编辑,菜单编辑界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

我们可以通过选择图标按钮进行菜单图标的选择,如下是选择菜单图片的界面。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

这样我们可以采用devexpress内置漂亮的系统图标,也可选择系统文件里面的图标文件。

如果用户登录系统后,觉得自己管理的菜单有些多,那么可以通过菜单配置的方式,选择性的呈现某些菜单,把其他部分的菜单隐藏起来,这个就是自定义应用菜单界面,界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

8)系统登录日志

登录日志,这个就是用户尝试登录的时候,留下的记录信息,其中包括用户的登录用户名,id,ip地址、登录时间,以及登录是否成功的状态等信息。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 这个登录日志,就是在系统登录尝试的时候,留下的记录,可供管理员进行跟踪了解某个账户的使用情况,也可以根据这些登录信息进行一个统计报表的分析。

 

9)系统审计日志 

审计日志,设置我们在访问或者调用某个应用服务层接口的时候,横切面流下的一系列操作记录,其中记录我们访问的服务接口,参数,客户端ip地址,访问时间,以及异常等信息,这些操作都是在abp系统自动记录的,如果我们需要屏蔽某些服务类或者接口,则这些就不会记录在里面,否则默认是记录的。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

审计日志的明细展示界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

10)字典管理

字典管理界面,左侧列出字典类型,并对字典类型下的字典数据进行分页展示,右侧则利用分页展示对应字典类型的字典数据,字典管理界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

新增或者编辑窗体界面如下

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

批量添加字典内容的界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

省份城市行政区的模块管理,也主要是为了提供一个三级联动的字典列表给界面使用,因此这里对这些统计局的数据进行一个维护和展示出来,如下界面所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

 

11)参数配置模块

一般来说,一个系统或多或少都会涉及到一些系统参数或者用户信息的配置,而abp框架也提供了一套配置信息的管理模块,abp框架的配置信息,必须提前定义好配置的各项内容,然后才能在系统中初始化或者通过接口查询来使用,本abp快速开发框架引入了另外一种配置信息的定义,实现更加简化的处理。

参数配置管理模块界面如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

配置模块使用主要特点是以键为操作对象,然后内容是json序列化后的内容,可以存储用户自定义的类的序列号字符串,通过整合了settingsprovider.net组件,使得我们操作配置内容更加方便和动态化。

 

以上就是框架里面主要的模块内容展示,当然我们可以结合代码生成工具来快速开发自己的业务管理模块,而这些主要就是设计好数据库后,对框架代码和界面代码的统一生成后进行整合到主体框架里面即可,可以获得高效、统一、快速的开发体验。

详细的代码生成工具开发过程,可以了解随笔《利用代码生成工具生成基于abp框架的代码 》、《abp开发框架前后端开发系列---(8)abp框架之winform界面的开发过程

abp框架代码生成

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

最终根据根据选择数据库表信息,一键生成相关abp架构分层代码,文件结构如下所示。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

abp框架的winform界面开发

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

设置好后直接生成,代码工具就可以依照模板来生成所需要的winform列表界面和编辑界面的内容了,如下是生成的界面代码。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

放到vs项目里面,就看到对应的窗体界面效果了。

ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

生成界面后,进行一定的布局调整就可以实际用于生产环境了,省却了很多时间。