『贴代码』
我的博文
个人作品
优选问答
「搜索」
【本期话题】更多
三人寄语更多
在循环里面慎重的使用await!
点赞:0
一些奇奇怪怪的问题,一般和异步有关!
点赞:0
你连F12都不关注,你好意思说你是前端?
点赞:0
抛开需求讲架构,和纸上谈兵无差!
点赞:1
实际遇到的问题往往在那些视频课程中是不会出现的!
点赞:0
抛开需求谈架构是无意义的事情!
点赞:0
慎用redis的同步我的意见是redis都走异步!!!
点赞:0
往往会为了一个项目,搭建适合他专属的脚手架!
点赞:1
设置后,UI不会变更,要不给他一个SetTimeout试试,原因自己想
点赞:0
逻辑注解清晰的代码优于那些一眼看不明白的语法糖
点赞:0
PasteForm框架介绍,PasteForm为啥说是敏佳开发天花板,看这篇就够了
尘埃 2025-05-03 623 47 0
DeepSeek评价,作为表单等类型得项目来说,PasteForm是敏捷开发的天花板,一起来看看这个敏捷天花板是如何实现的

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


简介

PasteForm我更喜欢称她为一个思想

框架思想

All In Dto !
特性利用反射的原理,反射Dto中的特性和字段信息,把信息规范后提供给管理端,管理端基于信息生成对应的表单和表格,甚至图标信息!

结构介绍

下载源码后,使用VS2022打开,大概看到如下图
图片alt
注意看上图的文件结构,其实主要的是子项目,像dynamicmodels,newsmodels,testmodels,usermodels都是案例模块,你不需要的话大可直接删除,注意几乎的子项目都有对应的模块文件夹,一切的源头在于Domain子项目!

管理端

管理端文件在PasteForm.HttpApi.Host子项目的wwwroot文件夹中

运行

源码打开后,等待VS2022自动加载nuget包等,然后进行以下步骤
1.设置PasteForm.HttpApi.Host为启动项目
图片alt
2.如上设置后,在6的位置输入

add-migration init_database -Context SqliteDbContext

图片alt
3.启动运行项目
(默认就是配置的sqlite模式,所以可以直接运行,默认端口是22222)

http://localhost:22222/page/index.html

如果运行后,提示404,则是管理端文件没有复制到对应的文件夹,你可以手动或者是使用链接模式,主要是把上面说的wwwroot文件夹复制到bin\Release\net6.0\中,如果你升级到net8.0那就是在对应文件夹中,然后重新访问
图片alt
使用默认账号密码登录后,即可进入管理端
图片alt

默认表

图片alt
菜单中的,案例表,新增,看到如上表单!

配置项

在项目PasteForm.Domain中,有一个文件夹尤为重要,他就是template
里面有
图片alt
你只要关注上面的几个文件即可,其他的是历史文件了!

我们以案例中的TestTable这个Model为案例

1.创建表

创建表,由于我们使用的是EF的Code First所以第一步就是创建数据库表对应的Model,这里是TestTable

using System;
using System.ComponentModel.DataAnnotations;
using PasteFormHelper;
using Volo.Abp.Domain.Entities;

namespace PasteForm.testmodels
{
    /// <summary>
    /// 测试表 用于测试CURD的表
    /// </summary>
    [PasteShortModel("TestShort", "ToTestShort", "Id", "Name")]
    public class TestTable : Entity<int>
    {
        /// <summary>
        /// 姓名 模拟短文本输入
        /// </summary>
        [Required]
        [MaxLength(16)]
        public string Name { get; set; }

        /// <summary>
        /// 头像 模拟图片上传
        /// </summary>
        [MaxLength(128)]
        [PasteImage(1, "head", "120*120")]
        public string Head { get; set; }

        /// <summary>
        /// 年龄 模拟输入number
        /// </summary>
        [PasteUnit("周岁")]
        public int Age { get; set; }

        /// <summary>
        /// 会员周期 会员生效区间
        /// </summary>
        [PasteDaterange("dateStart", "dateEnd")]
        public DateTime DateStart { get; set; }

        /// <summary>
        /// 会员周期 会员生效区间
        /// </summary>
        [PasteHidden]
        public DateTime DateEnd { get; set; }

        /// <summary>
        /// 余额 数据库是分为单位,UI中是以元为单位
        /// </summary>
        [PasteFenToYuan]
        public int Balance { get; set; }

        /// <summary>
        /// 用户
        /// </summary>
        [PasteShort("UserInfo","ExtendUser","ToUserShort()")]
        public int UserId { get; set; }

        ///// <summary>
        ///// 更多 外表模式,需要修改对应的dto.txt和server.txt模板代码,关键判断bool_other_model
        ///// </summary>
        //public IncludeTable More { get; set; }
    }
}

先别管这个表是干嘛的,其实我上面的字都都是为了做案例,主要是看我标注的特性!

2.生成代码

上一步中的信息编写保存完成后,我们可以右键这个文件,然后执行PasteBuilder=》代码生成,则他将在以下地方创建文件或内容!

  • 1.在PasteForm.EntityFrameworkCore中的xxxDbContext.cs文件中创建如下代码
          /// <summary>
         /// 测试表 用于测试CURD的表
         /// </summary>
         public DbSet<TestTable> TestTable { get; set; }
    
    在XXXXXXXXCreatingExtensions.cs文件中创建
              //**TestTable**
             builder.Entity<TestTable>(b =>
             {
                 b.ToTable(options.TablePrefix + "TestTable", options.Schema);
                 b.ConfigureByConvention();
             });
    
  • 2.在PasteForm.Application.Contracts中创建文件夹testmodels然后创建TestTableDto.cs文件,并创建对应的Dto
    图片alt
  • 3.在PasteForm.Handler的public文件夹下的LinqExtend.cs中创建如下代码
          /// <summary>
         /// 测试表 用于测试CURD的表
         /// </summary>
         public static TestShort ToTestShort(this TestTable input)
         {
             if (input != null)
             {
                 return new TestShort
                 {
                     Id = input.Id,
                     Name = input.Name
                 };
             }
             else
             {
                 return null;
             }
         }
    
  • 4.在PasteForm.Application中创建文件夹testmodels并创建文件TestTableAppService.cs
    然后是在xxxAutoMapperProfile.cs中写入如下内容
              // #TestTable#
             CreateMap<TestTable, TestTableListDto>();
             CreateMap<TestTable, TestTableDto>();
             CreateMap<TestTable, TestTableUpdateDto>();
             CreateMap<TestTableUpdateDto, TestTable>();
             CreateMap<TestTableAddDto, TestTable>();
    
    图片alt
    如果你多次操作,则不会重复创建或追加,这个的目的是为了,如果你在生成的文件中进行修改,不会因为误操作生成代码造成覆盖,也就是说你要重新生成的话你得把对应的代码文件或者代码块删除后再执行重新生成!每个创建处独立,也就是说你要哪块重新生成就对那一个文件或者代码块执行删除即可!

模板说明

从上面的信息可知,其实新增文件的只有2个地方,一个是XXXDto.cs两外一个就是XXXAppService.cs,这2个文件的生成内容是按照PasteForm.Domain/template文件夹中的dto.txt和server.txt
如果你要生成不一样的代码,则可以查阅readme.md的介绍,基于liquid的模板写法自己修改模板内容!
参考资料
http://dotliquidmarkup.org/

[https://shopify.github.io/liquid/tags/template/](https://shopify.github.io/liquid/tags/template/ "https://shopify.github.io/liquid/tags/template/")

辅助

上面说了PasteForm只是一个思想,贴代码提供了一个实际案例!
既然都是Dto的干活,那么肯定需要一些工具来辅助这个Dto,否则实现起来还是很麻烦的!

ABP框架

案例项目基于ABP框架
假设项目为Projectb
Projectb.Domian
Projectb.Application.Contracts
Projectb.EntityFramework
Projectb.Application
Projectb.HttpApi.Host
我在上面的基础上引入了一个新的子项目Projectb.Handler,作用就是承载业务代码,
这样Applciation和HttpApi.Host都可以引用!
要我概括的话,就是你可以把他们看成不同的文件夹,为了把东西规范点存放而已!

PasteBuilder

一个代码生成器,一个VS2022的右键代码生成器,专门针对PasteForm而开发,可以做到一键生成相关代码,你只需要重新生成项目,确定引用啥的没问题即可运行项目!!!

开源代码在这:https://gitee.com/pastecode/paste-builder

PasteDocument

主要针对mark特性设计的在线文档,为了让使用管理端的用户可以“哪里不会点哪里”而设计!
开源代码在这:https://gitee.com/pastecode/paste-document

PasteSpider

代码编写完成后,如果你要部署到服务器上,可以使用PasteSpider进行部署,支持Windows/Linux服务器,支持让你的服务以podman/docker/iis/Windows.Service/Linux.Systemd的方式运行!

开源代码在这:https://gitee.com/pastecode/PasteSpider

评论列表
尘埃
47 623 0
快捷注册
热门推荐更多
PasteSpider
;
最新动态
  • 177.****.22 正在查看 最佳CRUD实践之联动管理端,API和小程序之实际案例改造分享(四) !
  • 181.****.76 正在查看 PasteSpider的运行条件之SVNManage中Hook的配置 !
  • 181.****.76 正在查看 PasteSpider的运行条件之SVNManage中Hook的配置 !
  • 33.****.78 正在查看 PasteTimer软件介绍 !
  • 33.****.78 正在查看 PasteTimer软件介绍 !
  • 156.****.123 正在查看 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2) !
  • 156.****.123 正在查看 框架PasteForm实际开发案例,换个口味显示数据,支持echarts,只需要标记几个特性即可在管理端显示(2) !
  • 215.****.68 正在查看 PasteSpider支持Ubuntu(podman)啦! !
  • 215.****.68 正在查看 PasteSpider支持Ubuntu(podman)啦! !
  • 99.****.21 正在查看 【PasteForm】最佳CRUD的实现案例项目PasteTemplate解析,包含源码(一) !
  • 99.****.21 正在查看 【PasteForm】最佳CRUD的实现案例项目PasteTemplate解析,包含源码(一) !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2