V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zjsxwc
V2EX  ›  程序员

Web 开发真的还需要框架吗?

  •  1
     
  •   zjsxwc ·
    zjsxwc · 2019-09-04 10:47:33 +08:00 · 17067 次点击
    这是一个创建于 1688 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Web 开发真的还需要框架吗?我觉得现在已经没有必要了


    关于请求
    java 只用 servlet
    golang 只用 net.http
    php 只写原生脚本

    关于返回
    全部都返回 json,而不返回 html,因为前端 React、Angular、Vue 已经很成熟了,静态资源全走 CDN


    关于业务
    全部都用语言写与框架无关的 Service 对象来处理业务,无非就是纯粹的面向对象模拟现实业务而已。还有业务中涉及数据库操作的,不管是用 builder 模式拼 sql、还是用 sql 模板引擎拼 sql、亦或者用 ORM 把数据实体化操作 sql、甚至直接徒手写 raw sql 等都无所谓了。
    第 1 条附言  ·  2019-09-04 14:59:13 +08:00
    请先回答框架提供了什么?

    模板引擎?不需要了,我返回 json
    数据库操作?这个和框架无关,不用框架也能拿来用
    用户鉴权以及 session 相关?很简单就是个 key-value 读写
    Admin RBAC ?和业务有关,自己实现一个也简单
    第 2 条附言  ·  2019-09-04 15:06:40 +08:00
    还要我说的不用框架,并不是说不用三方组件
    第 3 条附言  ·  2019-09-04 15:22:28 +08:00
    还有关于楼下一群人开始偏离主题,变成了写 “与框架耦合的轮子 ”比 写“框架无关的轮子” 好的讨论
    第 4 条附言  ·  2019-09-04 15:49:30 +08:00
    框架的好处是
    方便招人
    有统一的规范比如命名格式等可以遵从
    可以用与框架相关的轮子节省时间
    第 5 条附言  ·  2019-09-05 10:22:28 +08:00
    在下讨论的是 web 后端,与前端没关系
    第 6 条附言  ·  2021-06-21 11:57:22 +08:00
    各位不要再冷嘲热讽我了,当初这个帖子是看到 B 站泄漏的 golang 代码,没有使用框架,有感而发。

    -------------

    ps, 我说的意思也是指多使用专业的低耦合的领域组件,而尽量少用大而全的高耦合的框架,当然不用框架可以做到低耦合也可能做到高耦合,当然也存在完全是由低耦合组件组成的“框架”。
    154 条回复    2021-06-21 11:23:18 +08:00
    1  2  
    T3RRY
        101
    T3RRY  
       2019-09-05 08:20:14 +08:00
    @a11214214 hhhh,来了老弟
    tianyu94
        102
    tianyu94  
       2019-09-05 08:20:40 +08:00 via iPhone
    @zjsxwc 那我上了几年班,公司技术领导都是傻子还让我用框架🐶
    speedofstephen
        103
    speedofstephen  
       2019-09-05 08:23:13 +08:00
    部分同意, 但是 SpringIOC 那种对象管理自己实现感觉坑很多啊
    kevindu
        104
    kevindu  
       2019-09-05 08:30:56 +08:00
    我最近在用 Rails,觉得真 tm 好用,全是现成的轮子,虽然有的根本用不上,但是想要用的都集成进来了,比 Python 的 Flask 好用不知道多少倍
    a11214214
        105
    a11214214  
       2019-09-05 08:31:05 +08:00
    @T3RRY 对啊老哥 哈哈
    aa6563679
        106
    aa6563679  
       2019-09-05 08:38:31 +08:00 via iPhone
    事务怎么办?事务传播怎么办
    saltedFish666
        107
    saltedFish666  
       2019-09-05 08:43:20 +08:00
    框架这个本来就是为了更快的开发,既然没有多少效率提高,那用于不用没有什么特别的区别,可以选择用
    wweir
        108
    wweir  
       2019-09-05 08:51:09 +08:00 via Android
    公司人员实力够的话,没必要用框架了。
    但如果一堆刚毕业及能力与之相近的人,不用框架,怕是代码风格都能恶心死人,更别说很多边边角角需要注意的地方了
    LuckyKoala
        109
    LuckyKoala  
       2019-09-05 09:18:12 +08:00 via Android
    个人项目可以随意折腾,公司项目不会给时间自己摸索着实现基础功能的,一般会选择在成熟框架之上接着开发。
    annielong
        110
    annielong  
       2019-09-05 09:20:56 +08:00
    看项目的复杂度了,简单的用不用都行,如果是大型的一般还是会用框架的
    zjttfs
        111
    zjttfs  
       2019-09-05 09:21:02 +08:00
    如果 web 站不做 seo 搜录么? 那 json 就不行了. 还是得后端渲染,所以说了那么多 没用...
    ilaipi
        112
    ilaipi  
       2019-09-05 09:23:53 +08:00
    当初 Spring 解决的是什么问题呢?

    你真的想回到自己到处 new 各种 instance 的操作吗?配置参数都自己去通过 Properties 去加载?
    encro
        113
    encro  
       2019-09-05 09:27:29 +08:00
    React、Angular、Vue 也是框架

    就拿 session 来说,框架可以让你改一个配置,实现将 session 存放位置在数据库,文件,内存,redis 等切换,你不用实现自己的 session handler

    gin 框架那么多中间件,很多都非常有用,哪怕一个简单的 c.JSON()都让你代码节省很多,理解更加容易很多。

    框架是一种约定,有了这个约定大家行为一致,代码编写和理解浏览效率提升,这时候框架如同法律,想象下,没有法律的世界,最终会乱成什么样?

    框架是一组已经测试好的工具,放弃框架就等于让农民放弃机械化使用手工作业,使用联合收割机的农名一天可以收割几百亩田地,使用镰刀的农名一天辛辛苦苦收割半亩田地。
    chen2019
        114
    chen2019  
       2019-09-05 09:29:23 +08:00
    你公司就你一个开发就想干啥就干啥吧,框架当然可以不用.
    但是基于你的问题,我只是不明白 前端为啥要用 React、Angular、Vue 用原生的不就好了吗??
    nnnToTnnn
        115
    nnnToTnnn  
       2019-09-05 09:30:08 +08:00
    大佬,React、Angular、Vue 也属于框架啊,而且还有很多,我觉得你对框架是否有很大的误解?
    wellR
        116
    wellR  
       2019-09-05 09:33:07 +08:00
    你可以不用现下流行的框架,最终你自己集合第三方库整的那套就是框架
    chen2019
        117
    chen2019  
       2019-09-05 09:34:14 +08:00
    补充下
    其实就算是 java golang php 从本质上说也可以理解为是 C 的一个框架,那么你为啥不直接用 C 呢,而 C 从本质上说可以说是二进制码的框架,那直接用二进制码不是更好?
    Tlin
        118
    Tlin  
       2019-09-05 09:44:47 +08:00
    @chen2019 哈哈 框架 就是一层套一层
    nnnToTnnn
        119
    nnnToTnnn  
       2019-09-05 09:44:53 +08:00
    回答你第一个问题
    ```
    关于返回
    全部都返回 json,而不返回 html,因为前端 React、Angular、Vue 已经很成熟了,静态资源全走 CDN
    ```

    > 我从来不知道哪个 web 是可以不用返回 HTML 的? 就算是 Adobe 的 Flash 也需要 html 来进行加载,你说的 React、Angular、Vue 更加不同谈,完全就是 html+js+css ( PS: 不了解你去看看 webpack 的说明)


    第二个问题

    ```
    数据库操作?这个和框架无关,不用框架也能拿来用
    ```

    > 来来来,你写一个 jdbc 试试? 如果是 java 你用的 jdbc 来操作数据库,jdbc 本来就是一个框架,如果不用框架,你得自己去通过对每个数据库的协议来进行开发,这个工作量远远大于你开发项目的工作量


    第三个问题

    ```
    用户鉴权以及 session 相关?很简单就是个 key-value 读写
    ```

    > 那单点登入? 或者说你用户鉴权的安全性如何考虑? 和 csdn 一样明文存储密码? 直接采用序列号生成 SESSION ? 如果你这个项目能上互联网,算我输,渗透测试就把你打回去了



    框架:

    软件框架,是软件开发过程中提取软件的共性部分形成的体系结构。框架不是现成可用的应用系统,而是一个半成品,是一个提供了诸多服务,供开发人员进行二次开发,实现具体功能的程序实体。

    组件:

    组件是封装了一个或多个程序模块的实体。组件强调的是封装,利用接口进行交互。组件也称为构建。插件是组件的一个子类,就是将组件中具有某些特点的组件归为插件。

    -----------------------------------------------------------------------------------------------------------
    PS


    让我猜猜

    楼主估计只是工作一两年的萌新,估计连 React、Angular、Vue 等前端的基础理念都没搞清楚,也没搞清楚框架 /组件的区别。

    更加别谈后台的分布式事务,微服务,线程池,并发,等等这些概念了。


    当然,你们公司只是做一个 github page,那当我没说



    ----------------------------------------------------------------------------------------------------------------


    不会就要学,没有接触过,深度了解过,没有资格去发表自己的评判,一个不了解 React 和框架 /组件概念的人
    去评判是否能够用,怎么我觉得很可笑
    shawshi
        120
    shawshi  
       2019-09-05 09:45:06 +08:00
    除了 Servlet,Filter 要么?
    nnnToTnnn
        121
    nnnToTnnn  
       2019-09-05 09:52:28 +08:00
    而且,说句比较让你大脑清楚的事情

    1. java
    2. golang
    3. php
    --------------------------
    4. html
    5. js
    6. css

    这些都是一般搞汇编的人搞了个 GCC 编译器导致一帮搞 C/C++的屌人,搞出来的框架。

    如果你不想用框架, 请写汇编,对接系统的网络编程函数。
    nnnToTnnn
        122
    nnnToTnnn  
       2019-09-05 09:53:29 +08:00
    @nnnToTnnn 又想起来了,搞汇编的人,又是搞二进制的人搞出来的,如果你想要不用框架得去写 01010101 这种
    nnnToTnnn
        123
    nnnToTnnn  
       2019-09-05 09:57:25 +08:00
    @ilaipi spring 解决的只是 ejb 的一种轻量级的替代方案,之后才发展壮大。ioc and aop 这些都并不是必须的,没有这些一样可以编程,只不过需要自己用单例模式去管理生命周期,用 hook 来做面向切片编程,最早微软就是这种做的。
    falcon05
        124
    falcon05  
       2019-09-05 10:08:27 +08:00 via iPhone
    是的,需要框架
    felixLv
        125
    felixLv  
       2019-09-05 10:09:13 +08:00
    前端不是 web 开发吗?那你为何还要用 vue,react 啊?那你怎么不去写原生
    583376938
        126
    583376938  
       2019-09-05 10:12:50 +08:00
    好问题
    xomix
        127
    xomix  
       2019-09-05 10:13:04 +08:00
    框架提供了什么我跟你一点一点说:
    1、可自由更换的仓储层,高级框架提供仓储层迁移服务(数据库随便用什么都行,想换还有专门的迁移程序)
    2、缓存层,同上。
    3、对微服务提供快速布置的虚拟化层,提供服务发现和服务注册。
    4、提供 RPC 框架,方便协同开发或未来的第三方调用。

    我暂时想到这么多,也不想继续花时间补充再想了。中小型企业开发当然用不上这些,但是并不是这些技术都是无用的不是吗?
    daguaochengtang
        128
    daguaochengtang  
       2019-09-05 10:20:30 +08:00
    > 因为前端 React、Angular、Vue 已经很成熟了

    你看,你自己说的这 3 个旧市前端 3 大框架
    zjsxwc
        129
    zjsxwc  
    OP
       2019-09-05 10:23:03 +08:00
    @felixLv

    @nikolausliu

    我们讨论的是后端 web 开发
    tairan2006
        130
    tairan2006  
       2019-09-05 10:30:50 +08:00
    golang 确实可以不用框架,java 不用框架你是在逗我么
    JerryCha
        131
    JerryCha  
       2019-09-05 10:34:57 +08:00
    前端还觉得你们只要 JavaScript 就够了
    miniwade514
        132
    miniwade514  
       2019-09-05 10:35:16 +08:00 via iPhone
    送你六字符真言:......
    james122333
        133
    james122333  
       2019-09-05 10:40:20 +08:00
    还是要阿 要规范 要的是极轻量框架 现今许多框架都太肿了
    dk7952638
        134
    dk7952638  
       2019-09-05 10:46:30 +08:00
    这种问题一开始我还是不厌其烦的告诉新人或实习生框架的意义,现在我直接就告诉他们没有为什么,公司强制要用,不会就学,感觉棒极了
    ninjachen
        135
    ninjachen  
       2019-09-05 10:53:17 +08:00 via Android
    假如你是名 100x 程序员,或者公司业务很小,个人的话其实无所谓。
    但商业软件产品需要很多人协力完成的
    haloha
        136
    haloha  
       2019-09-05 10:57:01 +08:00
    一个人开发爱用啥用啥 你去公司的话不用框架公司也不会要你
    Augi
        137
    Augi  
       2019-09-05 10:57:35 +08:00
    框架是为了更多的是为了规范吧,确实不一定能带来好的效果,但是如果是长期迭代的大型项目,如果不用框架,那么后期的人员变动和维护是不是有点难,如果不难,说明你们没用被人的框架,自己潜移默化的搞了一个团队适应的框架而已。
    wsy190
        138
    wsy190  
       2019-09-05 11:18:05 +08:00
    话说不用视图层框架,参数是不是还得从 request 中获取。
    jsjscool
        139
    jsjscool  
       2019-09-05 11:40:02 +08:00
    按照这种说法就不该有软件工程这门专业,更不应该有设计模式这种理论。编程编累了可以看一下软件工程的历史,为什么会出现。
    xpresslink
        140
    xpresslink  
       2019-09-05 11:44:38 +08:00
    @nekoyaki 开发要是用汇编语言那就太 low 逼了,大牛都是直接用机器码
    hafuhafu
        141
    hafuhafu  
       2019-09-05 11:50:56 +08:00
    不用框架不就意味着自己造轮子吗?造的轮子质量未必还有别人的好。
    yuhr123
        142
    yuhr123  
       2019-09-05 12:16:31 +08:00
    并不是所有 web 需求都要通过 react、vue、angular 去做,大多数项目直接用 Django、Rails、Laravel 可以非常快的实现需求,实效性项目基本离不开后端框架。
    bridgeca0
        143
    bridgeca0  
       2019-09-05 14:25:50 +08:00
    又有人要从沙子做 cpu 开始了吗
    drafter
        144
    drafter  
       2019-09-05 14:27:39 +08:00
    @bridgeca0 沙子怎么做...
    bridgeca0
        145
    bridgeca0  
       2019-09-05 14:56:11 +08:00
    @drafter 提炼硅
    nikandaoleshenme
        146
    nikandaoleshenme  
       2019-09-05 17:57:16 +08:00
    @bridgeca0 能提炼出高纯度硅的技术, 还写个球子代码,卖专利去 [滑稽]
    echisan
        147
    echisan  
       2019-09-05 20:11:58 +08:00 via iPhone
    我建议前端直接操作数据库
    MotherShip
        148
    MotherShip  
       2019-09-06 00:37:59 +08:00
    赶紧水深火热嗷
    ——————————————————————————————————
    java 只用 servlet

    完全没问题,最简单的,你先写一套工具把请求里的 JSON 自动装配成 Java 对象解决了,要求对业务代码无侵入哦,还要能读取 properties/yml 配置来设置下划线转驼峰,思考一下该怎么做呗——

    然后 servlet 你应该知道是线程不安全的吧,现在某些业务里的一些类要做原型模式,每个请求都要做实例化,要求是只在类上加注解就行,去实现吧——

    然后手动配 web.xml 里的 servlet 路由,然后部署到 web 容器再启动是不是太麻烦了呢?当然还是得上注解,
    根据注解的值自动配置每个 servlet 的路由,然后记得把容器嵌进来哦,打 jar 包就能运行的那种——
    ——————————————————————————————————
    数据库操作?这个和框架无关,不用框架也能拿来用

    那请封一个 crud util,要求和 mybatis-plus 一样,先自动生成实体类,然后用实体类 get/set 方法引用指代大部分基本字段,还要能读取实体类的注解来自动处理逻辑删除和乐观锁,最后要用带泛型的 basemapper 类封装 crud 操作,当然性能不能比 mybatis 差吧——

    一定要灵活,最好能用方法调用解决表关联的问题,要是能自动扫描索引并且优化 SQL 就太棒了呢——

    我们还有 MongoDB 呢,顺带请您做一个抽象层吧!一定也不难对不对——

    哦对,注解式事务也是框架相关,也实现一下吧,顺便做一下完整的 AOP 呗,AspectJ 要专门的编译器当然不行,看看 JDK 动态代理怎么做的吧,当然我们虽然不用专门的编译器,但是你得在注解里支持 AspectJ 的语法哦,顺带写个 IDEA 插件支持一下你注解的语法高亮吧——
    ——————————————————————————————————
    用户鉴权以及 session 相关?很简单就是个 key-value 读写

    那请您来做一个类似于 Spring Security 的框架,顺便实现一下 OAuth 呗,顺带我这业务可能要变动,可能要接多种登录方式,账号密码登录,手机验证码登录,微信 openid 登录,session 要支持多种持久化方式,同样是用注解支持配置权限哦——

    ——————————————————————————————————
    这些是单机应用的问题,接下来做 rpc 调用了

    我们写业务的最多只能做到用注解标明这个函数是远程的,剩下的你当然都会帮我们做了对不对?访问注册中心,然后用动态代理去做实际的远程调用,再封装结果,封装异常给我们,这个你想想咋做呗,应该也不难——

    分布式事务你一定能随手搞定吧?也要加注解就能做哦——

    ——————————————————————————————————
    顺带抛出异常一定要简单易懂,我知道咱们自己封的异常谷歌肯定搜不到,那每个异常给出可能出的问题中文说明不过分吧——

    哦对,以上都不算工时不计绩效哦,毕竟是你自己提出要自己写代码抛弃框架的嘛,自己晚上加加班吧,半个月内差不多能出活吧——

    出 bug 倒扣钱,耽误其他人出活当然得承担后果咯——

    然后文档要详细,注释要详细,后来人看不懂哪怕你离职了也有义务解答,不然分分秒扔掉你的代码用开源框架重构哦——

    ——————————————————————————————————









    做完了是吧?

    还没出 bug ??

    真的??

    我操 牛逼 你已经吊着 SpringSource 的所有程序员打了 你已经做出了一大套框架 整理整理开源然后等着猎头挖你去国外养老吧
    0x000007b
        149
    0x000007b  
       2019-09-06 11:06:06 +08:00
    @kevindu flask 就是自己玩玩,随便弄点什么只有一两个接口啥都不考虑的东西,分分钟就可以用了。
    Rashford
        150
    Rashford  
       2019-09-06 11:14:30 +08:00
    关键这样做有什么意义呢,不是浪费精力又浪费时间吗?
    Rashford
        151
    Rashford  
       2019-09-06 11:16:33 +08:00
    当然,那种"练手"的项目就不要讨论了,自己想怎么写都行。企业会有这么荒唐的开发模式?现在什么年代了
    cooooler
        152
    cooooler  
       2019-09-06 15:12:26 +08:00
    是不是编辑器也要用命令行的才能显示出来你牛逼
    wh1012023498
        153
    wh1012023498  
       2019-09-09 21:44:30 +08:00
    == 我就知道这样的蠢问题 会有很多人评论。。笑笑不说话。。
    tctc4869
        154
    tctc4869  
       2021-06-21 11:23:18 +08:00
    楼主发的内容让我觉得楼主对框架的认知运用很有问题。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3210 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:35 · PVG 21:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.