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。

时间: 2024-10-21 19:24:27

Java 后端搞 MVC 是邪路的相关文章

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

java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼.遂决定梳理一下自己所学的东西,为大家分享一下. 经过一年意识到以前也有很多认识误区,比如: 偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动. 不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因

如何简单区分Web前后端与MVC

MVC是开发所有软件所必须涉及的基本几个划分 M主要负责数据与模型,V主要负责显示C主要负责交互与业务所以不管是前端还是后端,都是有MVC的.MVC是一个对于软件简单的抽象,不管是M还是V,还是C都是有很多细分的.所以理解MVC是一种业务抽象是非常重要的. 前端MVC 前端流行的MVVM就是对于前端MVC结构的一次重新定义.特别是angular这样的框架出来后,前端的MVC就非常完善了.再加上SPA与混合APP的流行,MVC在前端就是一个完整的体系.同理后端一样是有MVC的. 后端MVC 基本上

零java基础搞定微信Server

自从打通了微信client到BLE设备端的通道.我的工作就转移到了server端了.微信的BlueDemoServer是以java编写,而本尊仅仅懂得嵌入式,对JavaWeb一窍不通. 本尊贵为IOT的弄潮儿.下定决定要了结这件事. 索性就写一个系列的学习笔记,督促自己,名字叫"零java基础搞定微信Server",记录下我这样零java基础的人应该怎样应对web服务端. 我的计划是让系列中的文章结合BlueDemoServer进行分析,目的是尽快的掌握这个项目所需的基础技术.不在关系

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

书架主要针对Java后端开发. 3.0版把一些后来买的.看的书添补进来,又或删掉或降级一些后来没有再翻开过的书. 更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可能很著名,但干涩枯燥,喋喋不休的把你带回到大学课堂上昏昏欲睡,不录. 1. 操作系统与网络的书 <Linux内核设计与实现 - Linux Kernel Development 第3版>Robert Love用最薄的篇幅,顺畅的文字将Linux内核主要的算法讲清楚了,比<深入理解Linux内

Java后端开发从初学者玩成大牛的学习路线

如果你是在校学生,务必要在学好基础(比如计算机系统.算法.编译原理等等)的前提下,再考虑去进行下面的学习.第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应的视频.学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试.学完以上内容以后,你应该对Java有一个基本的了解了,你可以用

第65节:Java后端的学习之Spring基础

Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api)-springFramework. 各种学习的知识点: spring expression language spring integration spring web flow spring security spring data spring batch spring网站: http://sp

面试经验合集-Java后端&lt;一&gt;

面试一:CDKHXJSYJS 时间:2018-12-29 周六 地点:航天科技大厦32楼 一 技术题目 <回忆版> 1.上下转型 2.Java异常:分类.处理.设计 3.二叉排序树:原理/自我实现 4.冒泡排序 5.IOC:原理/自我实现 6.利用反射机制,自我实现一个Web框架(类似于Structs.Spring MVC) 7.Java的static.属性.对象构造/初始化过程(涉及:继承.依赖.this.super等) 8.多线程操作 9.线程安全:涉及有哪些问题.如何保障? 10.Myb

网易Java后端开发面试心得

Java后端面试标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架. 其实,很多面试者能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断. 但现实情况是,大多数人可能面试前没准备,或准备方法不得当.要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小. 在本文里,将通过一些常用的问题来介绍面试的准备技巧

面试大厂回来后,有一些话想对 Java 后端开发说一说

在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的. 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断. 但现实情况是,大多数人可能面试前没准备,或准备方法不得当.要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类