[collect]框架的作用

本文最后更新于2017年6月17日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

学习提高

正文:

参考解答:

@Intopass

一、首先,到底什么是框架?

①首先从DRY原则开始说起
Don’t Repeat Yourself,不要重复你的代码。

1)最初级的DRY:语法级别
2)进阶的DRY原则:方法级别
3)继续进阶的DRY原则:类型级别
4)继续继续进阶的DRY原则:多个类组合级别

②设计模式,更高层级的DRY应用
设计模式是经过长时间编码之后,经过系统性的总结所提出的针对某一类问题的最佳解决方案,又称之为最佳实践。而在小规模的编码工作中,其实并不需要什么设计模式,只有大型程序才有设计模式发挥的空间,所以我们需要借助一些特定领域有足够规模的问题来了解一下设计模式存在的必要性。

③框架,是设计模式的集大成者,是DRY原则的最高应用

二、那么问题就来了,框架到底是什么?要不要学,怎么学?

下面以JavaWeb开发为例再进行一些说明,并顺便简单介绍一下JavaWeb的一些脉络。

① 静态网页时代
② Servlet时代
③ JSP包打天下的时代
④ Servlet + JSP 时代
⑤ MVC模式时代

一次典型的访问是这样的流程:
1. 用户输入网址或点击链接或提交表单,浏览器发起请求
2. –> 通过互联网,通过HTTP协议 –>
3. Tomcat接受到HTTP请求,生成HttpServletRequest对象,根据Web.xml的配置,调用开发者编写的HttpServlet,HttpServlet根据请求内容,调用JavaBean获取数据,JavaBean从数据库获取数据,返回HttpServlet,HttpServlet将数据转发给JSP,JSP负责将数据渲染为HTML,由Tomcat负责将HTML转化为HTTP响应,返回客户端。
4. –> 通过互联网,通过HTTP协议 –>
5. 客户端浏览器接收到HTTP响应,浏览器将HTML渲染为页面,并运行其中可能存在的JavaScript进一步调整界面。

⑥ JavaWeb框架
⑦ 所以当然要学框架,要用框架,那么要怎么学?
1. 用框架要知其然,还要知其所以然,要大体明白框架实现一个功能特性的原理,不能只是会用,只是觉得很神奇就可以了。就拿前面的Hibernate + Spring声明式事务为例,要弄明白框架这部分是怎么实现的。
2. 首先要夯实你的语言基础,如JavaSE基础,语法掌握,用法掌握,有些同学语法还不熟练就开始学框架,等于地基没打就起高楼,你可能会快一步,但是迟早要遇到瓶颈,甚至摔跟头。
3. 那么何时开始学习框架?我不建议新手一开始就直接使用框架。就好像一开始学习编程语言,大家都不推荐直接使用IDE,一定要用命令行自己编译运行几个文件之后,了解清楚了之后才可以使用IDE,要不然对于底层原理不了解,遇到问题没法自己手动排查。
4. 使用框架也是一样,如果不是自己写多了重复性的代码,就很难理解框架为什么要这么设计。如果不尝试几种不同的实现,就很难理解框架为了灵活性而做出的设计和扩展点。如果不写几十个权限检查语句,就很难理解AOP到底有什么好处。
5. 框架这么好,我该全部使用框架吗?首先只有在规模以上的程序中,才有应用框架的必要,一个简单的程序没必要使用框架,当然如果你很熟练,使用也无所谓。
6. 要学习一下框架的核心源代码,要为扩展框架做好准备,因为虽然框架基本上还算灵活,但是面对错综复杂的业务需求,永远不可能面面俱到,而你不了解框架的话,可能会给你实现业务需求造成麻烦。这也是有些人坚持使用Servlet+JSP原生开发,而不是用框架的理由。
7. 只要程序大了,归根究底还是要使用框架的,不是用别人写好的,就是自己写一套。这里我不建议自己写,不要重复造轮子,总有专业造轮子的。你草草写就的往往不如别人已经千锤百炼的代码。除非你是为了学习与研究的目的,自己写,那就是一件很好的事情。

==

@Harry Zhu、fleuria、pilot

【框架有其自身的适用场景,是瑞士军刀,非妇孺皆宜】
框架可以让你在保证代码质量的基础上,拥有更多时间来关注自身的业务逻辑与代码
【框架有学习曲线,有时候,框架学习的难度比手写代码自己实现的难度要高不少】

框架做的事情,就是自带胶水,做一些脏活累活替我们集成这些组件,降低偶发复杂度,我们可以专心往里面填业务。

规定了开发者写哪些代码/不写哪些代码,怎么写代码——这就是框架主要解决的问题。

规范代码布局,约束实现方式。

  • 如果追求开发速度快,ROR
  • 如果追求方便Full Stack, Django
  • 如果追求学习简单上手, PHP框架任选
  • 如果直接瞄准FB,TB,BAT,追求性能至上,大团队开发,企业铂金镶钻级开发,Java框架任选
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3362.html

《[collect]框架的作用》上有10条评论

  1. Spring AOP 的实现机制
    http://www.importnew.com/28342.html

    AOP(Aspect Orient Programming),一般称为面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。本文主要介绍Spring AOP的两种代理实现机制,JDK动态代理和CGLIB动态代理。

    静态代理是编译阶段生成AOP代理类,也就是说生成的字节码就织入了增强后的AOP对象;动态代理则不会修改字节码,而是在内存中临时生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。

    如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的,诸如private的方法也是不可以作为切面的。

  2. Netty4 学习笔记之四: Netty HTTP服务的实现
    https://blog.csdn.net/qazwsxpcm/article/details/78364023
    https://github.com/xuwujing/Netty-study/tree/master/Netty-httpServer/src/main/java/com/pancm/netty/server

    基于Netty4构建HTTP服务—-浏览器访问和Netty客户端访问
    https://blog.csdn.net/wangshuang1631/article/details/73251180

    Netty 简单的HTTP服务器
    https://www.cnblogs.com/luangeng/p/7875710.html

    Netty入门教程2——动手搭建HttpServer
    https://www.jianshu.com/p/ed0177a9b2e3

    (高级篇 Netty多协议开发和应用)第十章-Http协议开发应用(基于Netty的HttpServer和HttpClient的简单实现)
    https://www.cnblogs.com/crazylqy/p/4901820.html

  3. netty简介及HTTP实现Demo
    https://www.jianshu.com/p/cfd2c037dd7b

    netty的开发流程

    无论是基于netty进行HTTP服务器开发,还是进行socket开发,抑或是长连接开发,netty代码的开发流程主要有以下三个步骤:
    1.编写服务器,定义boosGroup和workerGroup,启动ServerBootstrap
    2.在服务器里面使用Handler或childHandler去启动Initailizer,在Initailizer里关联着请求的诸多handler
    3.在handler里面覆写netty提供的特定的事件回调方法

    Netty学习笔记
    https://blog.gmem.cc/netty-study-note

  4. 公司为什么需要建立一套统一的开发框架?
    http://www.pmtoo.com/article/53583.html

    弊端一:自我繁衍
    在公司快速的发展过程中,往往会出现这样一个链条。新增一块业务 —> 招聘一位高级技术人员 —> 围绕这位同事组建一只技术团队 —> 该业务基本由这只团队负责。然后就形成了一个闭环。当需要跟其他业务进行交互时,经常是技术负责人之间自行决定。(我曾经经历过一个项目,同样一个业务接口,同时提供 RPC,HTTP,MQ 等多种方式,为了给不同的项目提供基础服务)。

    弊端二:管控壁垒
    随着业务规模的快速发展,这个团队很快的形成了一个部门,团队决策者通常会从自身利益考量,希望尽量减少对外部门的依赖,无论是技术选型,规范建立,组件选取,运行环境都能够自行掌控。(在这里讲一个笑话,在一家公司怎么成为中层领导呢?很简单,招聘足够多的下属就可以了)。

    弊端三:断崖效应
    当这样的技术氛围一旦形成,单个员工对单个项目的影响就会变的非常巨大。一个产品经常会因为一两个核心员工的离职难以为继,最后不得不重新开发新的产品。

    弊端四:资源浪费
    当每个团队都在试图构建自己完整的研发流程时。中间的技术研究,产品研发,运维管理就会出现非常多的资源浪费。

    弊端五:难以考核
    怎么衡量一个川菜厨师和一个鲁菜厨师谁更优秀?当每个团队都采用不同技术栈,不同的技术组件,不同的维护方式和规范时。已经无法从产出效率来判断一个团队的绩效。KPI 指标也就非常难以设立。

    统一开发框架的优势
    1. 避免重复性技术研究——节约人力成本
    2. 标准化技术规范——提升产品项目质量
    3. 进行技术沉淀——提升公司整体技术能力,避免陷入一个人的能力决定一个项目
    4. 可衡量的研发投入——对研发团队的有效管理和考核

  5. 什么是框架?
    https://paper.tuisec.win/detail/afa232669001cbb
    https://toutiao.io/posts/z4gicm/preview
    https://insights.thoughtworks.cn/what-is-software-framework/

    在编程领域,软件框架是指一种抽象形式,它提供了一个具有通用功能的软件,这些功能可以由使用者编写代码来有选择的进行更改,从而提供服务于特定应用的软件。软件框架提供了一种标准的方式来构建并部署应用。

    软件框架是一种通用的、可复用的软件环境,它提供特定的功能,作为一个更大的软件平台的一部分,用以促进软件应用、产品和解决方案的开发工作。软件框架可能会包含支撑程序、编译器、代码、库、工具集以及 API,它把所有这些部件汇集在一起,以支持项目或系统的开发。

    规矩即自由。孔子把“从心所欲,不逾矩”当做自己的最佳状态,其实很多事都是这样。一旦深刻理解了设计和使用框架的思维模式,你将迎来一个实质性的提升。

    在我工作的前五年,编程时很“聪明”,用技巧解决了很多问题,但之后的十五年(恰好在那一年我知道了框架的概念),我爱上了规矩,不但自己给自己(根据血泪教训)立各种规矩,而且从别人那里借鉴了很多规矩,无论是宏观的还是微观的。可以说,规矩就是固化的好习惯,虽然有时候也会成为阻碍,但是如果你想在编程领域工作到退休,那么这些规矩就是你表面上最大的资产,而对这些规矩的来龙去脉的理解和领悟,则是你深层次中最大的资产。

发表评论

电子邮件地址不会被公开。 必填项已用*标注