一个文档引发的惨案

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

文档驱动的思路介绍

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

开场白

甲用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

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

相关文章
|
6月前
|
监控 搜索推荐 数据挖掘
电子邮件营销新风潮:五步高效撰写EDM文案
构建成功的EDM邮件营销策略涉及理解目标受众、设定营销目标、创建吸引人的主题、个性化内容和情感共鸣、强调价值点、以及持续测试和优化。了解受众特征和行为以定制文案,使用生动语言制造兴趣,通过个性化和情感化元素增强连接,突出产品优势并设置明确的行动号召。运用A/B测试评估文案效果,并监控数据以优化营销表现。Zoho Campaigns等工具可提供支持,包括模板、编辑器和A/B测试功能,助力打造高效邮件营销文案。
125 1
|
1月前
|
数据采集 人工智能 测试技术
还在死磕AI咒语?北大-百川搞了个自动提示工程系统PAS
【10月更文挑战第4天】北京大学和百川智能研究人员开发了一种名为PAS的即插即用自动提示工程(APE)系统,利用高质量数据集训练的大型语言模型(LLMs),在基准测试中取得了显著成果,平均提升了6.09个百分点。PAS仅需9000个数据点即可实现顶尖性能,并能自主生成提示增强数据,提高了灵活性和效率。尽管存在训练数据质量和提示多样性等方面的潜在局限性,PAS仍为解决提示工程挑战提供了有前景的方法,有望提升LLM的可用性和有效性。论文详见:https://arxiv.org/abs/2407.06027。
44 3
|
3月前
|
安全 数据安全/隐私保护
全文彩印!人民邮电出版的“24小时学会黑客攻防”,讲的太好了!
黑客,对于普通电脑用户来说,太神秘,也太可恨了,他们通过各种方法侵入我们的电脑,窃取电脑中的信息。 很多时候,普通电脑用户在对黑客痛恨的同时,又钦佩其高超的电脑技术,从而想了解黑客是如何攻击电脑的,并掌握防御黑客攻击的方法,为电脑系统和网络的安全贡献自己的一份力量。
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
57 0
|
iOS开发 MacOS Windows
拥有100+高效工具的我,差点被这个问题难住了 | 给视频加字幕
拥有100+高效工具的我,差点被这个问题难住了 | 给视频加字幕
拥有100+高效工具的我,差点被这个问题难住了 | 给视频加字幕
|
编解码 自然语言处理 算法
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
253 0
无需任何3D数据,直接文本生成高质量3D内容,清华朱军团队带来重大进展
|
数据库
第一遍阅读之《信息系统开发与管理》(二战)
第二次学习信息系统开发与管理,第一感觉是:必过! 信息系统开发与管理距离我们软件的具体开发很近,在我们生物专业学习过程中,有一门课程叫做《食品仪器分析》,其中有一章节的内容讲的大概是建立一个工厂的过程是怎么样的。这其中的方法和我们的《信息系统开发与管理》的内容有异曲同工之妙,我们要建立的是一个工厂,但是摆脱不了和周围事物的联系。
|
SQL 人工智能 算法
Meta开源的ChatGPT平替到底好不好用?测试结果、加料改装方法已出炉,2天5.2k星
Meta开源的ChatGPT平替到底好不好用?测试结果、加料改装方法已出炉,2天5.2k星
167 0
数据的自述(1)我是个什么东西
我是数据。根据人类对我的定义,我就是对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。
数据的自述(1)我是个什么东西
|
机器学习/深度学习 存储 人工智能
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
1878 0
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...