『贴代码』
我的博文
个人作品
优选问答
「搜索」
【本期话题】更多
三人寄语更多
由于时间的问题,我们往往会给自己埋坑,等着后续或者下一任来填!
点赞:0
能通过内网IP访问的,尽量不要使用域名访问!
点赞:1
谋而后动,往往会让你对自己的代码更具信心!
点赞:1
对于答案来说,更重要的是找到答案的这个过程而不是答案本身!
点赞:0
你连F12都不关注,你好意思说你是前端?
点赞:0
抛开需求谈架构是无意义的事情!
点赞:0
时好时坏的结果,往往是多线程引起的逻辑混乱导致的!
点赞:0
实际遇到的问题往往在那些视频课程中是不会出现的!
点赞:0
一些奇奇怪怪的问题,一般和异步有关!
点赞:0
没有最好的语言,只有更合适的语言!
点赞:0
【PasteForm】最佳CRUD的实现案例项目PasteTemplate解析,包含源码(一)
尘埃 2024-09-22 1178 102 0
PasteForm的最佳CRUD实践,目的是规范前端后,让页面的内容由后端控制,实现项目新增表和改动表的时候,不需要前端修改代码即可实现管理端对新功能的支持!

更多特性PasteForm的介绍,请前往PasteForm操作文档查看 PasteForm操作文档与介绍


;

在之前的文章中,我详细阐述了我对CRUD(创建、读取、更新、删除)操作的理解,并付诸实践,开发了一个案例项目——PasteTemplate。随后,这个项目在实际应用中得到了进一步的验证和改进,特别是在PasteBuilder(贴Builder)和PasteSoft(贴代码)这两个实际项目中。

——— 点我访问PasteForm框架文档 ———

在实际项目中,我对案例项目进行了新的调整,主要是为了满足实际需求,因为一个不能应用于实际项目的框架是没有意义的!

前置条件

案例项目基于ABPvNext框架的简化版本,仅保留了XXX.Domain、XXX.Application.Contracts、XXX.EntityFrameworkCore、XXX.Application、XXX.HttpApi.Host等核心模块。在此基础上,我新增了一个子项目XXX.Handler,以便于开发。为了方便开发,可以下载PasteBuilder作为项目的右键代码生成器,这个生成器能够一键生成代码,避免了手动复制粘贴的繁琐。

XXX.Handler

XXX.Handler位于XXX.Application.Contracts之后,XXX.Application之前,主要用于聚合业务需求。例如,用户模块可能包含角色、权限、账号、找回密码、新建账号等功能,这些都可以聚合到UserHandler中。UserHandler可以被XXX.Application和XXX.HttpApi.Host调用。XXX.Application主要负责WebApi的核心代码,而XXX.HttpApi.Host则可以实现更多功能:

  1. 引入Channel,将代码写入HostedService中,实现本地消息队列和队列处理。
  2. 如果引入RabbitMQ,还可以作为消费者。
  3. 在系统初始化时,可以作为内置菜单和默认账号的写入。
  4. 为一些特殊接口提供服务,如三方接口等。

PasteBuilder

PasteBuilder是专为PasteTemplate模板项目创建的右键代码生成器,作为VS2022的插件。安装后,只需在XXX.Domain中对应的模块添加表的Model,然后右键生成代码,即可在EF、Application等模块中自动生成代码。之后,右键重新生成解决方案,理论上可以直接生成成功,然后执行add-Migration生成对应的迁移代码。

项目案例要点

本次项目改动较大。之前发布的PasteTemplate作为项目模板,其核心思想是将一些基础功能封装成模板,后续开发新项目时,直接选择该模板即可生成新项目,避免了重复搭建基础框架的麻烦。项目命名、文件命名等都是全新的,避免了从旧项目中复制代码并重命名的繁琐过程。

登录页面

新的登录页面将采用统一的设计,后续项目的前端(管理端)几乎无需修改代码,只需调整后端代码即可。登录页面作为重要的一部分,主要改动在于样式和引用动效。接口地址主要在/api/app/User/xxx中。

图片alt

管理端首页

管理端首页通常包含菜单页面和工作台。PasteTemplate的管理端首页如下:

图片alt

左侧菜单采用动态模式,菜单由权限控制。系统在首次启动时会将默认菜单写入数据库。如果当前账号拥有root-root权限,则会返回所有菜单,root-root表示超级权限,拥有系统的所有权限。

PasteForm

作为本次的主角,PasteForm实现了CRUD操作,由三个页面组成:

pasteform/index.html

表单页面的主页面,显示数据列表。如下图所示:

图片alt

主要包含以下几个区域:

  1. 搜索区域:由InputQueryXXXModel控制,动态生成。包含以下功能:
    • 外表输入:例如输入某个表的ID作为查询条件,点击后会弹出选择页面,选择后会将ID赋值给搜索输入框,显示名称字段,传值为ID字段,可配置,使用属性outer
    • 选择框:可配置多个选择项中选择其中一个,如按状态查询,使用属性select
    • 多选框:对应选择框的多选模式,接收方式取决于字段类型,使用属性selects
    • 参数来源:当前页面可能由其他页面传递参数,如给某个角色绑定权限,使用属性query
    • 参数传递:点击新增时,将当前页面的参数传递给下一个页面,使用属性linkquery
    • 默认值:在查询模型中赋值即可作为默认值,单选或多选框需添加属性selected=true
    • 一般输入:支持基础输入,如numbertext等。

搜索区域的内容来源如下:
在页面首次打开时,会从对应的API中读取表的两个信息:表格模型的属性和搜索区域的模型值。例如:

/// <summary>
/// 读取ListDto的数据模型
/// </summary>
/// <returns></returns>
[HttpGet]
[TypeFilter(typeof(RoleAttribute), Arguments = new object[] { "root", "root" })]
public PasteBuilderHelper.VoloModelInfo ReadListModel()
{
    var _model = PasteBuilderHelper.ReadModelProperty<RoleInfoListDto>(new RoleInfoListDto());
    var _query_model = PasteBuilderHelper.ReadModelProperty(new InputQueryRoleInfo());
    if (_query_model != null)
    {
        _model.QueryProperties = _query_model.Properties;
    }
    return _model;
}

上述代码读取了RoleInfoListDto模型的属性和搜索区域的InputQueryRoleInfo属性。

下一章将详细介绍数据表格中的内容。

评论列表
尘埃
102 1178 0
快捷注册
热门推荐更多
PasteForm
贴代码框架的项目案例,里面有PasteForm的案例代码等;
最新动态
  • 49.****.74 正在查看 在Centos7中安装Nginx !
  • 49.****.74 正在查看 在Centos7中安装Nginx !
  • 165.****.82 正在查看 Postgresql的安装 !
  • 165.****.82 正在查看 Postgresql的安装 !
  • 50.****.220 正在查看 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-需求分析(1) !
  • 50.****.220 正在查看 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-需求分析(1) !
  • 204.****.21 正在查看 PasteSpider更新摘要,持续更新 !
  • 204.****.21 正在查看 PasteSpider更新摘要,持续更新 !
  • 51.****.53 正在查看 PasteSpider管理端从开始配置到使用 !
  • 51.****.53 正在查看 PasteSpider管理端从开始配置到使用 !
  • 1.****.152 正在查看 PasteSpiderV5版本更新内容一览 !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2