Java 后端搞 MVC 是邪路
前两天和朋友讨论,我展示了一番 d2js,朋友有点纳闷,你这个是直接操作数据库,不是违背了 MVC 设计思想吗?
经常讨论有助于刺激思维。这次本人忽然进入了状态,终于意识到问题所在!
现在的系统叠床架屋,前端有一套 mvc 框架,后端还有 mvc 框架。现在后端都进入 output json 的时代了,没想到还自有一套 mvc。
我说,前端因为和服务器隔离,在另外一个进程如浏览器进程上跑,而其又需要显示,需要 v,既然有v,便需要 mvc,所以前端必须弄一套 mvc,这是必然的。
而后端呢?
如果站在全系统视角:java web服务器,只是系统里的 c,数据库——不管sql nosql——才是真正的 m!
运行于java服务器上的数据,都不全,都是自 db 中提取的一个 snapshot 而已! 道理与前端的 m 可以视同为 db 中的一个 snapshot 一样!
站在全系统视角,事情变得非常明了,简单就是美。我之前喜欢谈论数据库是中心,现在完全不用这套思维了。
数据库是 M,后端是 C, 前端(含放在后端的JSP/JSSP)是 V
昨天看到Java有人讨论框架太复杂,我兴奋的前去砸场子。这里是一段对话:
很多情况下V是省不掉的
虽然已经退化到一个Json实体
但是,还是独立的V啊
为啥restful的response就不能叫V了?
虽然很薄,但那也是独立于持久层的存在
哪那么容易就能从这么多种多样的持久层直接捅上来?
什么年头了,还在围着数据库转圈圈
数据库是且仅是一个持久化存储服务而已
只要HTTP还是无状态无连接为主
VO就不可能被跳过
我的观点:
no,db 这个阴影会永远笼罩在java头上,事实上,人家关系运算搞的好好的有数学基础,支持各种java无法理解的选择投影,而nosql又可以跑 mapreduce 跑大数据,只有java 一厢情愿的认为应当把数据放到内存变为 java 里的对象
没有 db 的系统根本不是系统。
而没有java可以换 php,换 c#,换 ruby,换 python,换 js
现在连个app都有 sqlite,甚至browser都有
数据永远要放在 db 里,放在java里的也必须放到 db 里,放在文件里的,也要把文件名登记在 db 里,实际上文件系统就是个大 db
db 的地位就是这么牛,db 才是当之无愧的 m
你说 rpc 的输出也能算 v,那更是可笑了,一个函数调用跨了进程垮了服务器返回值就是v,不跨进程不跨服务器返回值就是返回值,这得多荒谬啊——照这思路函数返回值在内存的布局也算成 v 好了
理解这个结构后,d2js 就顺理成章了。
这里可能有人认为数据库上既然跑 sql,sql 扮演了 c 的内容,应该将数据库也视为 c 才对。
这个问题有点类似于 tensorflow 的 graph,graph 是由 python 构建的,最终生成op码被解释执行。这里,执行是 c++ 的 dll 完成的,但是,逻辑是由 python 提供的!所以,问题根源是逻辑由谁提供。
java 提供的逻辑由数据库完成,所以 java 是 c。即使全部弄成存储过程都在 db 上运行,控制存储过程运行的是链路是“前端->后端->DB”,那么依然可以认为是由 java 和 db 共同分担了 c 的职能。
按这个思路继续,后端甚至不是唯一的 c,其应当视为与前端的 c 共同完成 controller 职能的一部分 controller。
那么,像MQ、规则引擎、流程引擎等等呢?
要理解 MVC 是界面框架,上面这些根本没有界面,谈什么 mvc 呢?它们就是服务啊。如果非要说有 v,那日志、watch board 就算是 v 好了,在这种视角它们就是 c。
Java 后端搞 MVC 是邪路的更多相关文章
- java后端程序员1年工作经验总结
java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为 ...
- java后端书单
Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端开发者的书单. 首先要 ...
- Java后端工程师必备书单(从Java基础到分布式)
Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端开发者的书单. 首先要 ...
- 招聘前端、Java后端开发、测试、Mysql DBA
公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...
- java后端书籍推荐
书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...
- 我的Java后端书架 (2016年暮春3.0版)
04月 24, 2016 | Filed under 技术 http://calvin1978.blogcn.com/articles/javabookshelf.html 书架主要针对Java后 ...
- 我的Java后端书架2016年暮春3.0版(转)
书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
- (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)
这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...
- Java后端程序员都做些什么?
这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...
随机推荐
- 【赵渝强老师】管理Docker镜像
一.什么是Docker的镜像 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙 ...
- 《Vue.js 设计与实现》读书笔记 - 第6章、原始值的响应式方案 & 响应式总结
第6章.原始值的响应式方案 6.1 引入 ref 的概念 既然原始值无法使用 Proxy 我们就只能把原始值包裹起来. function ref(val) { const wrapper = { va ...
- SpringBoot 实现文件上传
参考:Java springboot进阶教程 文件上传功能实现 后端代码编写 常见错误分析与解决 在 Service 业务层接口中增加一个上传文件的方法 因为文件并不是上传至数据库中,所以不需要编写 ...
- CF708C Centroids [树形DP,换根DP]
Description 给定一棵树. 至多进行一次操作:删去一条边,连接一条新边,保证操作完后仍是树. 问每个点在进行操作后是否可以成为树的重心. Solution 性质\(1\):若一个点不是树的重 ...
- C# efcode 新建表格数据 增删改查
using TestDbContext ctx = new TestDbContext(); var b1 = new Book { AuthorName = "杨中科", Tit ...
- 工作使用:Exchange命令集(超级重要)
工作使用:Exchange命令集(超级重要) 命令1:导出某个用户的邮件 New-MailboxExportRequest -mailbox dusonglin ...
- 16收16发ARINC429模块
6通道发送, 16通道接收* 发送通道:每路发送通道FIFO大小为:511 x 32bit(CHR32216/32316) ,缓存256条发送消息(CHR32216-EX/32316-EX)发送FIF ...
- KubeSphere 社区双周报|2024.09.13-09.26
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- CentOS8安装RabbitMQ3.8.16
之前安装过旧版的RabbitMQ和Erlang,先卸载. ①:卸载RabbitMQ /sbin/service rabbitmq-server stop yum list | grep rabbitm ...
- AI五子棋_08 五子棋落子规则对应的价值
AI五子棋 第八步 恭喜你到达第八步! 利用前一步得到的棋型分析结果,考察每一个可能落子的位置,给每一个可能的位置打分,将棋子落在分数最高的位置上.根据经验,我们可以总结出下面的落子规则: 1. 致胜 ...