前两天和朋友讨论,我展示了一番 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 是邪路的更多相关文章

  1. java后端程序员1年工作经验总结

    java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为 ...

  2. java后端书单

    Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端开发者的书单. 首先要 ...

  3. Java后端工程师必备书单(从Java基础到分布式)

    Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端开发者的书单. 首先要 ...

  4. 招聘前端、Java后端开发、测试、Mysql DBA

    公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...

  5. java后端书籍推荐

    书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...

  6. 我的Java后端书架 (2016年暮春3.0版)

      04月 24, 2016 | Filed under 技术 http://calvin1978.blogcn.com/articles/javabookshelf.html 书架主要针对Java后 ...

  7. 我的Java后端书架2016年暮春3.0版(转)

    书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  9. (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)

    这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...

  10. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

随机推荐

  1. 高通USB overview

    一,Dedicated Connectivity Ports (USB) 1,USB 3.1 Type-C with DisplayPort 2,Support USB3-DisplayPort Co ...

  2. 2023年8月中国数据库排行榜:TiDB 重夺榜眼,PolarDB 再进一位

    斗力频催鼓.争都更少筹. 2023年8月的 墨天轮中国数据库流行度排行 在炎炎夏日中火热出炉,本月共有286个数据库参与排名.本月排行榜前十中,头部变动加剧.TiDB 发奋图强重夺榜眼,阿里云Pola ...

  3. Vue3 的 nextTick 函数

    作用: DOM 渲染是异步耗时的, vue2.x 需要等到 DOM 渲染完成之后做某个事情,需要使用 this.$nextTick , vue3.x 则直接提供了 nextTick 这个方法去实现 : ...

  4. EAFP 与 LBYL 风格

    EAFP 与 LBYL 是两种"防御性处理机制",相信你一定接触过,只是可能没有深入思考过这个问题. 输入两个数,要输出相除后的结果: a, b = map(int, input( ...

  5. Octomap的学习

    什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨迹,并建立正确的地图.地图有很多种表达方式,比如特征点地图.网格地图.拓扑地图等等.在<一起做>系列中,我们使用的地图 ...

  6. Nginx 安全配置

    server { listen 8089; server_name 10.5.210.203:8089; #charset koi8-r; #access_log logs/host.access.l ...

  7. 【2024.10.03】NOIP2024 赛前集训-刷题训练(5)

    [2024.10.03]NOIP2024 赛前集训-刷题训练(5) NOIP2017 提高组 小凯的疑惑 形式化题面:求最大的正整数 \(w\),满足 \(ax + by = w\) 不存在一对非负整 ...

  8. PHP word PDF excel 文档互转 预览 (linux libreoffice)

    1--卸载系统当前的libreoffice 执行如下命令:yum remove libreoffice-* 2--为了能使用镜像,在etc  目录之下的hosts文件内加入代理. 注意没有加的话,可能 ...

  9. chapter1 events and probability

    第一章  事件和概率 1.1 Appication: verifying polynomial identities 1.2 Axioms of probability 1.3 Application ...

  10. 基于CTFshow的文件上传二次渲染绕过与CTF实战

    1. 二次渲染简介 二次渲染指的是上传的文件(如图片),为了显示的更加规范(尺寸.像素),网站会对文件进行二次处理,经过解码或转换可能导致其中的恶意代码失效.例如,后门程序在图像渲染过程中可能被清除或 ...