前两天和朋友讨论,我展示了一番 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. 什么是SPA页面,它的优缺点?

    什么是SPA spa是单页面应用(single page web application),浏览器会一开始就加载所需要的html.css.javascript.一旦页面加载完毕,整个页面就不会因为用户 ...

  2. Blazor Hybrid 实战体验:那些你可能没预料到的坑没预料到的坑

    前言 昨天写了一篇介绍 Blazor Hybrid 技术的文章,但限于篇幅,一些问题未能深入探讨.今天,我想继续记录使用 Blazor Hybrid 过程中遇到的几个问题,以及这个技术目前的一些局限性 ...

  3. 云原生爱好者周刊:Dapr 成为 CNCF 孵化项目

    云原生一周动态要闻: Dapr 加入 CNCF 孵化器 Knative 1.0 发布 Canonical 开始提供针对 Intel CPU 优化的 Ubuntu 图像 Longhorn 为 CNCF ...

  4. KubeSphere 社区双周报 | OpenFunction 发布 v1.1.0 | 2023.5.26-6.8

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  5. 噢!JavaScript (2):对数组要小心使用delete

    最近在重写我自己的静态博客生成器,虽然遇到的小问题挺多,但今早这个问题令我印象深刻. 发现问题 博客的文章基础数据储存在main.json中,其中专门有数组dateindex来储存经过排列后的文章顺序 ...

  6. Centos7系统docker部署Ferry工单系统

    1.更新yum源国内阿里1.1备份当前yum仓库配置sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.rep ...

  7. Java中“=”克隆理解

    在Java中,对于基本类型可以使用"="来进行克隆,此时两个变量除了相等是没有任何关系的. 而对于引用类型却不能简单地使用"="进行克隆,这与java的内存空间 ...

  8. SyncOOD:增加OOD目标检测鲁棒性,自动化数据助您一臂之力 | ECCV'24

    本文是对公开论文的核心提炼,而非直接翻译,旨在进行学术交流.如有任何侵权问题,请及时联系号主以便删除. 来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Can OOD Object Dete ...

  9. 为 .NET Conf 2024 做好准备之本地社区活动 .NET Conf China 2024 启动

    .NET Conf 2024 是一个面向.NET生态系统社区的大型活动,将于2024年11月12日至14日举行.该活动将通过YouTube和Twitch进行现场直播,并在dotnetconf.net网 ...

  10. 关于MNN工程框架编译出来的静态库和动态库的使用

    一.MNN.lib文件路径 如果你看过之前的博客内容,应该可以在编译的的工程当中 C:\Users\Administrator\Desktop\MNN\MNN-master\MNN-CPU-OPENC ...