类似 class 与 jvm 的一种定义模型的规范。想象一下,定义一个 JAVA 对象,用 jvm 解释运行执行业务逻辑,用另一个解释器运行生成前端显示。将这两个解释器合成一个解释器就可以生成前端显示同时能驱动业务逻辑。 class 是一种类比,就像上面想象的形式。如果有一种模型定义规范,将业务的模型定义出来,在上面的前后端一体的解释器下就等于定义了业务系统。 https://www.v2ex.com/t/632780#reply11 请查看我前两天的一个提问,这个问题是一个变形。
1
snowydec 2019-12-29 10:31:51 +08:00
spring data jpa
|
2
lhx2008 2019-12-29 10:40:25 +08:00 via Android
有 SAAS 层面的,像 ps 一样拖拖东西也能做网站。还有就是之前 v2 有个老哥一直在吹的 json 到 mysql 的框架。
其实问题主要是 curd 不是真的 curd,需求很多是细化的东西 |
3
wysnylc 2019-12-29 10:43:00 +08:00 1
curd 是解析产品业务后的基本实现,所有开发的痛点是实现业务而不是单纯的 curd,不要本末倒置
|
5
vultr 2019-12-29 10:44:34 +08:00
工具可以简化 CURD boys 的工作,但是代掉 CURD boys,应该是行不通的。
CURD boys 还是很重要的,他们决定了细节。 |
6
22yune OP |
9
gowk 2019-12-29 10:53:18 +08:00 via Android
低代码开发平台?
|
10
loading 2019-12-29 10:56:28 +08:00 via Android
你可能是忽略了后端安全的部分问题,我觉得 orm 已经很好地简化了 crud。
|
11
3dwelcome 2019-12-29 11:01:19 +08:00 via Android
@22yune 业务逻辑如果是可批量复制的,那么 curd boy 自己都能抽象出来一套快速开发流程。
可惜,外包多了,你就会发现客户需求千奇百怪。并不是查询数据显示数据那么简单。 有外包公司人统计过,只有 50%的前端页面是可批量抽象的,剩下一半还是需要人海战术。 |
12
hantsy 2019-12-29 11:01:41 +08:00 1
大部分业务系统不止是 CRUD 那么简单。
这个以前建模为基础的开发方式,十几前的确很流行,比如 MDA 架构等,有太多的工具可以做这些事,比如 IBM,Borland 等都提供这方面的可视工具。但现在几乎这些大厂都放弃这些产品。 自从我放弃建模工具(比如 Rational,Together,Powerbuilder 等)后,我对这些 MDA 不再有兴趣,它们根本带不来开发效率,生成一堆垃圾代码,看似节约了时间,后期要在生成的代码上加上自己的逻辑就有吃屎的感觉,如果要清理那些垃圾代码需要大量时间。 目前基于 Spring 代码生成器还有一个比较流行,Jhipster,可以用来快速的建产品原型。真正长期的产品开发,还是慎用吧。 |
13
676529483 2019-12-29 11:04:33 +08:00
控制逻辑好复制,像 admin、各种静态生成器、被喷的 apijson,都在做这个层面的事情;还有一个目前不好取代的是,业务逻辑,这个可能需要像耗子哥说的那种更加高级的语言,简单操作就能生成代码的来做了
|
14
vanillaxxx 2019-12-29 11:05:10 +08:00 via iPhone
感觉业务模型千变万化这个得先抽象出来才能搞一个这样的东西吧……然而现实中几乎做不到
|
15
22yune OP @loading 安全可能是个问题。但现阶段还在思考可行性,安全性还未做考虑。我觉得这个场景下安全性对可行性不会造成阻碍。
|
16
cedoo22 2019-12-29 11:12:53 +08:00
参考 lombok, 能够根据注释, 自定义添加生成你要的 crud 的 java class 文件。
比如,lombok 中: @Data 可以把 public class User{private String name,private Integer age;} 自动转换成包含 getter setter toString()的 POJO 类的 class 文件。 具体到项目中, 就需要你自定义一套实用于自己项目的 lombok 了。 Java 6 开始,支持 JSR 269: Pluggable Annotation Processing API ( https://www.jcp.org/en/jsr/detail?id=269) 这个 JSR 可以支持编译过程中,修改抽象语法树,进而修改最终生成的 class。 |
18
chenshun00 2019-12-29 11:17:27 +08:00
数据流引擎,这种已经出现了 ,flowable , 但是这个只是一个引擎,如果你需要给用户使用还是需要做一些改造的,如果仅仅是 curd,其实很简单,用户建表,用户输入数据,用户查数据,改数据,只要实现这个就可以了,但是你要加入业务的规则就相对麻烦了。
|
19
tt67wq 2019-12-29 11:19:23 +08:00
CURD boys 想打死你!
|
20
WildCat 2019-12-29 11:27:49 +08:00 1
Rails Scaffold
https://guides.rubyonrails.org/v3.2/getting_started.html#getting-up-and-running-quickly-with-scaffolding 同样的框架上面诞生了 Basecamp, GitHub, Airbnb, Twitter, Product Hunt... |
21
hantsy 2019-12-29 11:34:44 +08:00
我想起以前一个 Spring 子项目,Spring Roo,超强的代码生成器,后来 Spring 官方放弃了,有第三方接手,不过现在看来也是没有什么进度。
https://github.com/hantsy/spring-sandbox/blob/master/roo/log.roo 另外 JBoss 下也有一个类似的工具,Forge,现在关注的人也不多。 |
22
hantsy 2019-12-29 11:38:17 +08:00
@WildCat Rails 影响了太多的软件工具,Spring Roo,JBoss Forge 本身可以说是克隆。 这类工具,对于早期的产品原型构建可能有一定的作用。现在的 Twitter,Github,Airbnb 等,我相信和这个 Scaffold 工具没一毛钱的关系。
|
23
leishi1313 2019-12-29 11:46:03 +08:00 via Android 1
计算机也开始有民科了?
|
24
22yune OP @hantsy 感谢回复!我的想法与 mda 非常类似,甚至可以说一样--模型驱动。我粗略看了一下,mda 的模型与我设想的不太一样,我想的模型包括业务逻辑,逻辑基于模型之间的关系,与显示相关的也应该是模型内部的形式。
就像指令集基于几种类型的指令就可以完全表达各种各样的程序过程,我思考有没有可能基于模型表达业务逻辑的类似指令集(不一定是指令,可能是一种声明,指令我觉得有一种过程性的动作含义),如果能建立,那模型表达应该会是明确的清晰的。如果业务逻辑不是基于模型的,或者定义规则复杂难明的,我理解会出现你说的生成代码形式的问题。 |
25
FeifeiJin 2019-12-29 11:55:40 +08:00 via Android
很多的,比如现在流行的 low code 平台。
氚云,简道云,airtable 等。 把 curd 和通用业务逻辑封装后,普通业务员拖拽实现需求。 |
27
22yune OP @cedoo22 感谢回复!你说的 lombok 和 jsr 我接触过(不喜欢 lombok )。我想的是一个 class 经过 jvm 能解释成前台显示也能驱动里面的方法。或者经过不同的 jvm,有些解释成某种的前端显示,有些是另一种前端显示,有些是某种后端技术(包括持久化支持),有些是另一种后端技术。
|
28
22yune OP @WildCat 感谢回复!看了一点,虽然 model 中有基础的 curd,但感觉跟其它语言的框架(上面有些回复说的)思想或方法类似。
|
29
cedoo22 2019-12-29 12:23:36 +08:00
@22yune jvm 生成前端,这个要自定义 jvm 吧。 目前,我是用 freemarker 根据数据库表 自动生成的前端页面。
|
30
wangkun025 2019-12-29 12:26:46 +08:00
砸场子啊。
无脑回复:不可行。 |
31
cedoo22 2019-12-29 12:28:28 +08:00
@22yune class 经过 JVM ,这不就是 servlet 吗?只不过 controller 加个 判断, 是产生 servlet 还是或者是交给 处理类。
|
32
alvinbone88 2019-12-29 12:39:52 +08:00 via Android
GWT?这东西早就被 Google 放弃了
|
33
otakustay 2019-12-29 12:40:24 +08:00
wordpress ?
|
34
22yune OP @cedoo22 感谢回复!
你说的是我类比中表达的意思。 只是这么做是行不通的,因为用 JAVA 写的还是面向对象或面向过程的思维方式。我想的业务模型定义更多可能是声明式定义(也有面向模型的过程)。这样写出来的 JAVA 代码是没办法反向出业务模型的。就算能反向也不行,这个模式转换太复杂。我想的是基于业务模型的定义即用于显示也用于驱动业务逻辑,就像你说的 servlet 一样。我想要的是通用的,servlet 不是通用的。 |
35
qinglizi4869 2019-12-29 12:52:02 +08:00
crud boy 做错了什么,就要丢饭碗 o(╥﹏╥)o
|
36
22yune OP |
37
wolfie 2019-12-29 12:53:41 +08:00
非开发人员鼠标点点拖拖配置的 CRUD 功能,还能集成流程还有表关联,市面上很多这种平台,通病就是性能极差。
|
38
cedoo22 2019-12-29 13:00:45 +08:00
@22yune 这种需求 , 确实无法做成通用的 , 只能是项目内部定制化, 细化一下、做成工具包。
如果是实现功能,更多的还是通过生成 代码,而不是生成 ‘处理器’。 |
39
takemeh 2019-12-29 13:07:11 +08:00
@qinglizi4869 #35 把他们解救出来从事更有意义的事
|
40
22yune OP @cedoo22 最终应该还是不同技术的代码,'处理器'是另一个层面的解释器或者说可能是代码生成器,处理器支持的语义多一点,模型定义就更丰富一点。抽象出形式,使形式能复用。处理器就能解释成各种具体技术实现。
|
41
lihongjie0209 2019-12-29 13:36:11 +08:00
先不说代码生成, 你确定你可以把你的需求文档翻译为你所谓的 ‘模型‘ 吗?
需求 > 需求文档 > 编码 客户 > 产品经理 > 程序员 我们把编码这一环节的参与者叫程序员, 你的模型也是一种编码形式, 所以参与者也是程序员, 只是换了一个叫法而已。 |
42
MeteorCat 2019-12-29 13:36:58 +08:00 via Android
业务简单没什么,但是你要解决的是运营提出的奇奇怪怪需求
|
43
22yune OP @lihongjie0209 业务系统里有业务模型这个应该是自明的。我主要的问题就是把这个模型表达抽象出来,能抽象出来就能'翻译',否则就是没抽象出来。所以你的问题就是我的问题,不要反问我了。
你说的叫法倒是无所谓,他们的工作内容应该会是不一样了。从主要编码变成主要描述业务模型。 |
44
22yune OP |
45
xiexiping 2019-12-29 14:12:55 +08:00 via Android 1
程序员总在想办法减少自己的工作岗位
|
46
wanqiangcrack 2019-12-29 14:16:36 +08:00
CURD 只是一种针对存储系统的操作,核心的业务逻辑用 AI 是替代不了的。
|
47
luozic 2019-12-29 14:18:25 +08:00
手擼 DSL? 設計出來就是爲了這個的,我暫時就知道:jetbrains 的 MPS,基於 scheme 的 Racket ?
|
48
CODEWEA 2019-12-29 14:20:24 +08:00
你想的太简单了,一句话:你如何用一个公共模型实现一个业务抽象后的模型?,你肯定还得对公共模型进行各种描述,到最后成本还不如直接实现一个业务模型
|
49
22yune OP @CODEWEA 感谢回复!
你说的可能是对的,你问的就是我的问题。业务模型的抽象我想大家都是没问题的,我是想更进一步对模型的描述的抽象。就用 JAVA 对象表示的模型的描述的抽象就两种:属性、方法。越抽象应该形式会越少。换个问法:模型的描述都有那些形式? |
51
Mogamigawa 2019-12-29 14:48:48 +08:00
恶魔!!!!!!!!!!!!!
|
52
reself 2019-12-29 15:19:01 +08:00
所有妄图寻找银弹的尝试注定失败
|
54
22yune OP @reself '银弹'只是像现在这样听说过,我不知道这个想法是不是银弹,我更希望是像现在的包管理和构建工具一样是一种好的实践。用美妙的想法将现有的东西结合成整体的创造。
|
55
howell5 2019-12-29 16:43:32 +08:00 via iPhone
先规模化 graphql 也不迟
|
56
wangxiaoaer 2019-12-29 16:56:28 +08:00
单个表的 curd 不是已经有库在做了吗?关键是根据业务对需要的表关联起来,可能还涉及到权限控制,这才是精髓,感觉很不好抽象出通用的。
|
57
GeruzoniAnsasu 2019-12-29 16:58:04 +08:00 via Android
您要找的是不是:
.net framework |
58
winglight2016 2019-12-29 17:58:35 +08:00 1
十多年前我曾经跟进过一个基于 UML 定义业务对象的开源框架:www.openmdx.org 可以参考一下
|
59
947211232 2019-12-29 18:09:34 +08:00
可行,只要你的系统能自己能完成项目需求的结构
|
60
mmdsun 2019-12-30 08:46:08 +08:00 via Android
微软的 webform ?各种拖控件事件绑定
|
61
flashrick 2019-12-30 08:55:16 +08:00
别的工程都是建立壁垒,只有软件工程:“如果我不会编程,我该怎么编程”
|
62
aaronysj 2019-12-30 09:08:27 +08:00
mybatis plus
|
63
TomVista 2019-12-30 09:11:24 +08:00 1
prisma,hasura 这俩库...
|
64
LeeSeoung 2019-12-30 10:01:19 +08:00
难的从来都不是 CRUD,而是把需求转成可以落地的实现方案。
|
65
rocksolid 2019-12-30 10:09:14 +08:00
一直有人做这个,但是 crud 人人都会,这种不仅增加学习成本,对于复杂业务逻辑也是难于普通 crud
|
66
22yune OP @luozic 感谢回复!
模型变化是常规场景。如果对模型定义的规范抽象出来了,对模型的定义肯定在这个范围内,变化也是定义过程。‘解释器’ 如果是通过生成代码再通过代码对应的解释器运行的话,代码要再生成一遍,就像 java 写的类修改后要重新编译一样。 |
67
mauve 2019-12-30 10:25:32 +08:00
不写 Java,不太懂楼主写的
但说到不用 CRUD,我有一个发现: JAM Stack ### A modern architecture — Create fast and secure sites and dynamic apps with JavaScript, APIs, and prerendered Markup, served without web servers. Headless CMS 配合 Static Site Generator ( SSG,eg:Hugo Gatsby Nuxt.js Next.js Hexo …… ) 使用 SSG 生成静态页面,使用 CDN 分发,然后配合 Headless CMS 进行 CRUD 及权限验证,国外已经非常多,但国内几乎没有 随之衍生的有 Headless E-commerce 国内的很少很少,我知道就只有一个 nike 官网 https://www.nike.com/cn/ Keyword:JAM Stack,Headless CMS,SSG |
68
noreplay 2019-12-30 10:28:20 +08:00
labView?
|
69
stormgo 2019-12-30 10:34:06 +08:00
不知道你有没有用过 python 的 Django 框架,他的 admin 界面就是你定义一个 model 生成对应的前端界面已经后端自动增删查改,但是用的多你会发现用户要的不是一个功能强大的增删查改,耳塞基于这个数据模型下的各种实际业务开发,所以我觉得你的想法是好的,但是用户要的远远不是单一的 CRUD 能够解决的,而是切合实际业务开发的各种组合
|
70
neilq 2019-12-30 10:57:41 +08:00
如果有这种模型,那么定义模型就替代了编写 crud,model boy 替代了 crud boy,只不过是 crud boy 换了个语言
|
71
22yune OP @stormgo
部分 v2er 好像有些误解。我们现在是用业务模型描述业务。我思考的是‘一种模型定义规范‘,用于描述业务模型的,不是描述业务的。需求的是抽象描述业务模型的语义。你说的情况就是现在大部分的情况——定义一个数据模型,真正的业务逻辑用各种其他语言实现的(如 java、Python )。我希望设计一种通用的业务模型定义的规范(或语言)(带业务逻辑的)。基于这个规范定义的业务模型,就可以用不同的前端、后端技术去解释模型。绝大部分的情况基于规范就可以有默认的解释,应该要支持调整。现在的语言,语义都是确定的。这个业务模型定义语言我希望是抽象的形式(比如包含、主从),可以用多重语义(现在是前端显示与后端逻辑)。 看了上面回复列出的各种已有产品(都是同一种意图,可能真是在寻找银弹)不太成功的现状。我有点怀疑这种定义业务模型的语言是否能抽象出来或抽象出来是否有意义(支持简单情况的抽象是可以的,支持上面说的低代码开发平台 通用化)。 MPS 还在了解,感觉对这个问题有帮助。 |
72
xuyang2 2019-12-30 11:55:53 +08:00
MuleSoft 了解一下
|
73
hantsy 2019-12-30 12:06:54 +08:00
Jetbrains MPS 感觉是语言语法分析的吧,这类工具很多,JavaCC,ANTLR(Hibernate 的 HQL 是这个分析的,以前看过一部分源代码 ,现在好久没关注了,不知道有没有换)。
我个人以前试过 JavaCC,以前对 NetBeans 插件开发感兴趣,NetBeans 语法分析支持 JavaCC 和 ANTLR,写插件如果要加入新语言的时候首先就是分析语法。不过现在好久没关注这些了。 以上这些都是静态分析,现在 Eclipse 的 Language server protocol 好像都是支持运行时分析,不知道怎么回事,VSCode 中有些插件是 Java 语法支持也是用这个。 |
74
hantsy 2019-12-30 12:10:41 +08:00
说到 MPS 我想到很多 IDL 语法工具。可以用一种中间语法即 IDL, 生成各种编译语言模型( java, js, c 等)。
|
75
luozic 2019-12-30 12:21:40 +08:00 via iPhone
软件工程要考虑已有部署运维版本的维护问题:已经部署的版本咋更新升级? 或者怎么从新版本降级到老版本,不是重新编译那么简单的事情。 并且现在大部分低代码生成都是 cms,或者都是为了中小规模实践,实际更好的描述是基于数据库编程 or 基于 sql 编程。
|
78
zifangsky 2019-12-30 12:47:19 +08:00
我看懂了,其实楼主思考的是如何创造强人工智能,可以根据我们人类给出的需求文档自动写代码那种
|
79
stevenkang 2019-12-30 13:56:41 +08:00
@zifangsky 听君一席话 胜读十年书啊!以前包括现在都有这种想法,做一个系统出来不用 CURD,但需求是人出的,要理解需求实现的功能,还是得人来实现,机器不可能完成了。
|
80
encro 2019-12-30 14:05:00 +08:00
关键字:低代码,serverless,Fass,Bass。
参考:appwrite,Apigee,firebase,Parse,strapi 等等。。 |
81
encro 2019-12-30 14:16:48 +08:00
业务估计目前还没有办法理解吧,
所以目前我建议可以考虑半自动:ui hub + biz hub + func hub + db hub, 解析起来就是准备基于行业的四个仓库:UI 库,业务配置库,基于 fass 的函数配置库,数据库。 也就是说要搭建一个 app,就是选选行业,选界面,选数据库,选好后配置一些规则。 |
82
PopRain 2019-12-30 15:16:07 +08:00
没有银弹, 做下去,你就发现你做了一个 Winform,Webform , 功能还没有人家强大 。。。。 简单的事情可以应付、需求一复杂就完蛋。
通用部分做成模块化可能是个比较可行的方案 |
83
hantsy 2019-12-30 15:33:36 +08:00
@zifangsky
昨天刚看完了美剧 [硅谷] ,最后一季跟上现在潮流,PiperNet 用上了 AI 和去中心化网络设计,放开了 AI 权限后,用 AI Bot 去优化压缩算法,一切想得很完美,结果因为 Monica 收到的一条信息少了一点(.),重新去思考整个网络架构,算法,发现了依赖 AI 的严重问题,不得不放弃整个项目,整剧完。 |
84
mymike 2019-12-30 15:36:20 +08:00
iaas paas saas
|
85
hantsy 2019-12-30 15:38:23 +08:00
@luozic 我差不多快 10 年没写 SQL,如果现在要用 MySQL CLI 之类的 Client 命令行都要查资料。
再说现在的项目,很多 RDBMS 也不再是唯一,有些不用,或者混用的项目很多。 |
86
luozic 2019-12-30 16:12:34 +08:00
@hantsy 剛剛的表達有錯誤,實際我想説的是一切以 database 爲中心編程,即使你沒有實際手寫 sql,或者 blabla,或者用 nosql 什麽的替代,最終你的 orm 還是其他的東西還是會自動去生成 database 裏面的模型,后面所做的一切基本都是以 databse 中的數據模型來去做進一步的功能。 所以,問題回到一件事情,是不是所有的功能都需要持久化,持久化是不是一定要使用數據庫,是不是一定要使用關係數據庫模型。
|
87
svaj 2019-12-30 16:19:13 +08:00
如果用 php 的话,有款框架叫 fastadmin curd 你建好表就可以直接生成想要的元素,都搞定了
|
88
openthinks 2019-12-31 09:13:43 +08:00
@luozic Oracle APEX 平台就是直接基于数据库,使用 SQL 查询及控制数据
|
89
joooooker21 2019-12-31 09:45:22 +08:00
实现的前提应该是业务场景比较固定
|