一个文档引发的惨案

简介: 这里只是介绍一下思路,真实项目里面并不是完全这么做的。

文档驱动的思路介绍

这里只是介绍一下思路,真实项目里面并不是完全这么做的。

开场白

甲用Excel做了一个数据库文档,做完之后感觉挺好的。乙看了之后,感觉做成json格式的似乎更好一些,于是改了改。

丙看了修改后的json后发现,这个不是和那个Vue的表单组件需要的json很像吗?于是又改了改。

丁看到这些后感觉,既然前端都可以这么做了,那么后端是不是也可以……于是也改了改。

甲、乙、丙、丁看到最后的效果后非常满意——这下终于不用996了!于是向老板请功。

老板看后大喜:太好了,你们可以回家休息了!

甲乙丙丁:……

到底发生了什么?带我慢慢分解。

思路

  由数据库文档出发,引出各种json,利用引擎、组件等实现基本的增删改查的功能!最终实现“文档在手,天下我有”的目标。基本思路就是下面这个脑图。

88.png

在线演示

☞  https://naturefw.github.io/RealProject/Demo/Doc01

89.jpg


源码地址

☞  https://github.com/naturefw/RealProject/tree/master/Demo/Doc01

实现步骤

  1. excel 格式的文档。
  2. json格式的文档。(由引擎生成)
  3. Vue表单组件需要的json。(由引擎生成)
  4. 改善表单组件的json。(需手动)
  5. 绑定表单。(Vue组件)
  6. 提交数据。(自动)
  7. 后端自动拼接SQL。(由引擎生成)

优点

  1. 增加一套增删改查,不需要增加代码,只需要增加json即可——json可以自动生成。
  2. 需求变更后,只需要修改文档,文档变化后,可以自动修改各级json。不用改动代码即可应对需求的变更。(本来也没有代码呀)
  3. 依赖注入,整个增删改查可以依据json完成,不需要copy代码。(还不是没有代码的原因?)
  4. 可以减少出bug的机会。(都不需要代码了,还怎么有bug?)
  5. 减少工作量,增加工作效率。(同上)
  6. 支持权限、角色。(这个转折有点突然吧,怎么冒出来的?)

缺点

  1. 灵活性有所限制。
  2. 特殊需要需要使用插件的方式实现。
  3. 不可能适应任何场景,这不是银弹。(还是先声明一下,避免有人多想)


详细介绍

数据库文档

  做一个项目,数据库文档是一个最基本的文档了,即便其他的可以省略,但是数据库文档是必选项!专业的数据库设计应该采用PowerDesigner,只是他设计的数据库文档,不方便用程序读取,所以这里采用了Excel的形式。

  Excel便于操作和使用,也可以方便的使用代码来读取内容,这样就灵活多了。比如下面这个样子。【Excel格式的数据库文档】

90.png


页面效果

91.png


看着控件挺多的吧,其实html部分只需要两个循环就可以搞定。

<h5>excel格式的数据库文档</h5>
<table rules="all" class="table_default1">
    <tr>
        <th>字段名称</th>
        <th>中文名称</th>
        <th>字段类型</th>
        <th>字段大小</th>
        <th>默认值</th>
        <th>允许空</th>
        <th>说明</th>
        <th>控件类型</th>
    </tr>
    <tr v-for="tr in dataExcel.info">
        <td v-for="td in dataExcel.orderby">
            <my-input :meta="dataExcel.ctlExcelMeta[td]" v-model="tr[td]" :value="tr[td]" ></my-input>
        </td>
    </tr>
</table>

  这里使用了Vue的表单组件,控件属性描述由meta绑定。这样模板部分会非常简洁。只需要设置好json就可以了。

  “控件类型”并不属于数据库文档的部分,这里只是为了便于演示,所以加上了。我们可以修改表格里的字段名称和中文名称,后面的json、表单、提交的数据、生成的SQL都会跟随改变。即第二个优点的体现。

json格式的数据库文档

  虽然代码可以读取Excel,但是在使用的时候开始有些不太方便,为了更方便我们改用json的形式。先做一个简单的转化。如下图。

【json格式的数据库文档】

var dataDocInfo = [
    {
        enName:"name",
        cnName:"姓名",
        type:"nvarchar",
        size:10,
        defaultValue:"",
        isNull:false,
        command:"员工姓名",
        ctlType:116
    },
    {
        enName:"age",
        cnName:"年龄",
        type:"int",
        size:4,
        defaultValue:"18",
        isNull:false,
        command:"年龄",
        ctlType:111
    },
    {
        enName:"borthday",
        cnName:"出生日期",
        type:"datetime",
        size:10,
        defaultValue:"1980-01-01",
        isNull:false,
        command:"出生日期",
        ctlType:103
    }
    //其他略
]

  然后我们可以依据这个json来做很多事情,比如生成建表的SQL语句,生成增删改查的SQL语句。还可以对数据做类型检测,比如是不是int。

生成表单组件需要的json

  我们可以做一个简单的引擎,把文档的json变成组件需要的json,只需要设置几个主要属性即可,这样可以形成一个“清水房”的效果。可以先实现基本功能。然后在通过“精装修”的方法做细节调整。

  这是自动生成的Vue表单组件的json,根据字段属性生成。

1. {
2.     "name":{
3.         "controlType":"101",
4.         "class":"cssTxt input_t1",
5.         "placeholder":"请输入姓名",
6.         "size":10,
7.         "maxlength":10,
8.         "value":"",
9.         "colName":"姓名",
10.         "title":"姓名",
11.         "name":"name"
12.     }
13.     //其他略
14. }

表单的展示


  表单组件需要json来描述,我们依据数据库文档,可以生成初步的json,这个json可以称为“清水房”,然后我们可以对其进行“精装修”,生成更漂亮的表单。这样就有了一定的灵活性,另外也可以去掉不需要的字段,以及增加需要的字段

精装修,设置详细属

92.png


后端


  依据json和客户端提交的数据,可以进行验证,通过验证后可以生成增删改查的SQL语句,然后提交给数据库。这样后端的基本功能就可以实现出来了。


FAQ


  • 数据验证怎么办?

数据验证分为前端验证和后端验证,前端验证注重与用户的交互,重点在于方便用户录入正确的数据。后端关注的是安全性,分为两大部分,一个是数据类型和范围是否匹配,一个是是否符合业务逻辑的要求。

如果后端采用node的话,那么前后端的验证基本可以使用同一套代码来实现,如果后端不是node,那么也可以围绕正则来实现判断。

前端的数据类型可以由组件来实现,比如日期组件,给出的数据都是日期格式,我们来验证一下业务逻辑即可。

后端就要更严格,必须对前端提交的数据进行严格的验证,这个可以根据文档里的字段类型来判断。业务逻辑可以依赖正则来判断。

  • 数据项(比如标题)不能重复的判断

这个就需要后端提供一个接口,先向后端询问是否重复,然后在给用户一个友好的提示。

  • 控件的联动怎么办?

以前是加各种事件来实现,现在Vue的思路是数据绑定,那么是不是可以对数据进行监控来实现呢?

  • 第三方组件、控件怎么办?

第三方的组件众多,能不能兼容就要一个一个来测试了。

总结

  现在看还比较简陋,这里也只是介绍一个基本思路,有朋友问我的时候,我总是无法形象的表达,做了这个演示,应该可以表达一下我的基本思想。其他的查询、列表、分页等也可以做出类似的形式,这样后台管理类的项目里,代码量的需求会急剧下降,那么后果会是什么样子呢?有点不敢想呢。  

最后感谢Vue,让我们前端的代码简化了不少。当然这个页面把好几个功能合在了一起,代码有点绕。同时也是体会到了Vue的强大,比如做一个批量修改的大表格的表单,轻松了很多。

本文作者:金色海洋

个人网址:jyk.cnblogs.com

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

相关文章
|
7天前
|
Java Unix 关系型数据库
时间API在更新,传奇已经谢幕,但技术永远不死
时间API在更新,传奇已经谢幕,但技术永远不死
|
9月前
|
Android开发 Windows
汪子熙趣味成语接龙的游戏软件使用文档说明
汪子熙趣味成语接龙的游戏软件使用文档说明
54 0
|
12月前
新增节添加代码【滴水逆向三期46笔记】
新增节添加代码【滴水逆向三期46笔记】
|
12月前
|
数据库
第一遍阅读之《信息系统开发与管理》(二战)
第二次学习信息系统开发与管理,第一感觉是:必过! 信息系统开发与管理距离我们软件的具体开发很近,在我们生物专业学习过程中,有一门课程叫做《食品仪器分析》,其中有一章节的内容讲的大概是建立一个工厂的过程是怎么样的。这其中的方法和我们的《信息系统开发与管理》的内容有异曲同工之妙,我们要建立的是一个工厂,但是摆脱不了和周围事物的联系。
|
编解码 自然语言处理 算法
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
207 0
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
|
XML Java 数据格式
从非诚勿扰看数据索引,优化代码小妙招
从非诚勿扰看数据索引,优化代码小妙招
117 0
数据的自述(1)我是个什么东西
我是数据。根据人类对我的定义,我就是对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。
数据的自述(1)我是个什么东西
|
JavaScript 前端开发 API
陪伴是最深情的告白,AdminWork框架升级更新摘要(一)
陪伴是最深情的告白,AdminWork框架升级更新摘要(一)
陪伴是最深情的告白,AdminWork框架升级更新摘要(一)
|
机器学习/深度学习 存储 人工智能
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
1834 0
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
|
SQL 搜索推荐 测试技术
日拱一卒的意义:开源搜索引擎Typesense作者自述:每天写一点代码,写出Typesense
日拱一卒的意义:开源搜索引擎Typesense作者自述:每天写一点代码,写出Typesense
224 0