不要一上来就学框架
来自公众号:码农翻身
问:有两年多前端经验,但感觉自己对后端知之甚少,没有安全感。但是后端语言又多,不知道学哪一门性价比好一些,求教。
语言不是重点,尤其是你已经会一门语言的情况下,后端编程最最基本的技术是这些:
1、浏览器和服务器是怎么打交道的?
重点就是HTTP协议。
2、理解url 和 代码之间的关联, 例如 www.xxx.com?action=login 这样的url 是怎么和后端的业务代码关联起来的?
这样的规则是在哪里定义的?用代码、注解还是配置文件?
后端的业务代码是怎么组织的?相信现在不会有人把业务逻辑都写到Servlet当中了, 所以需要很多MVC 框架像Struts , SpringMVC 来组织代码,让系统清晰易懂。
3、数据的验证、转换和绑定
如何保证浏览器发过来的数据是符合要求的?例如不能为空、不超过8个字符、两个密码必须相等.... , 出错了得给出错误提示。
浏览器发过来的数据都是形如username=liuxin&password=123456这样简单的文本, 但是后台程序却有着丰富的数据类型,什么String, Date ,Integer等等。所以需要把文本变成指定语言的类型,如何做转换?
类型转换以后, 后端的业务代码怎么才能有效的使用呢?
最简单的就是弄一个key : value 这个样的Map 出来, 业务代码直接用map.get(key) 即可,但是这样做缺乏“契约”,非常难以理解。
高级一点的可以把页面发来的数据直接绑定到对象的属性上, 并且支持数组,嵌套等复杂的结构。
例如user.name=liuxin&user.password=123456 可以绑定到一个叫User的对象, 其中有两个属性userName和password。
4、数据库访问
这一块是比较麻烦的, 毕竟面向对象(OO)世界和关系(Relational)数据库之间存在着天然的鸿沟。
对于简单的应用, 直接写点JDBC就够用了,只需要掌握Connection, Statement , Resultset这三个基础。
复杂点的需要用O/R Mapping 框架来搞定,例如 Hibernate, MyBatis ,还有RoR的ActiveRecord。
这其中比较棘手的就是表之间的关联, 就是所谓的一对多, 一对一, 多对多这样的关系, 如何在面向对象的世界里描述。
扩展开去,还需要处理连接池, 事务,锁 等各种烦人问题。
5、业务代码的执行
把业务代码放到哪里?代码该怎么组织?用事务脚本还是领域模型?贫血还是充血?
6、如何把对象变成json和其他格式,让前端使用。
原来的后端会用模板(JSP,Veloctiy ,FreeMaker等)生成页面,现在基本上是通过API提供数据了,需要把Java/Python对象变成JSON等格式来传输到前端。
搞定了前面这几点,就搞定了一个基本的网站后端了。
如果你仅仅是想了解下后端编程是什么样子,可以直接去学学框架,Java可以直接学Springboot,MyBatis, Python可以学Django, Flask,这些框架的抽象程度和封装程度都非常高,把上面所说的技术点都给屏蔽了,只要会用,就能开发后端程序。
如果你想深入学习后端编程,强烈建议:不要一上来就学框架。
要先用这些语言提供的最基本的能力,把这些技术点自己做一下,然后进入框架的世界,这样理解会非常深刻。
例如Java, 它提供了Web开发最最基本的功能:Servlet 和JDBC,Python也是类似,有WSGI, PyMySQL可以直接使用,用他们就可以做URL和代码的映射,数据的转换和绑定,数据库的访问。
从实践上来讲,可以用项目驱动的方法,做个博客之类的小项目,和你的前端编程结合起来。
接下来就是高并发,海量数据相关的东西了:
用ngnix做负载均衡和反向代理,用redis做缓存,用es做搜索,用mq来解耦,削峰填谷。每一点都够你挖掘很久。
上面这些软件都支持分布式下的高可用性,单点不够了就搞分布式,拆分数据库,拆分应用,搞微服务,限流/降级,部署的时候用docker,用k8s管理。
在分布式环境下很容易出现各种问题:数据一致性,同步操作,事务。这又会引发分布式锁,又需要通过分布式锁,BASE, TCC等技术来解决。
写了这么多,我想说的是:后端广阔天地,大有可为 !就看你想前进到哪一步了 !
作者简介:
刘欣,前IBM架构师,近20年从业经验,"码农翻身"公众号作者,畅销书《码农翻身》作者,用故事讲解技术是拿手好戏。拨开技术迷雾,轻松了解技术本质,从"码农翻身"开始。
●编号1044,输入编号直达本文
●输入m获取文章目录
Web开发
- 不要一上来就学框架
- 可以使用框架但千万不要依赖框架
- Java 后台管理开发框架!CURD 一键生成,再也不要重复搬砖了!
- 框架设计经验谈 -- 不要为框架作过多的假设
- 西安尚学堂告诉你java开发为什么不要过分依赖框架
- 不要再吹水地球人听不懂的技术,咱来点干货!--中文前端UI框架Kit(四)给你真正的原生的drag以及drop事件,而不是像市面上主流的Js框架jQuery,Ext等,利用mousemove事件,判断位置来模拟
- 抵抗勒索病毒的正确姿势——不要上来就封端口! 推荐
- Quartz:不要重复造轮子,一款企业级任务调度框架。
- 不要为框架作过多的假设
- 不要使用框架,框架用多了,人也傻了,离开了某个框架,你啥都不懂。
- 不要再使用JS框架了
- 不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质
- html基础 frameset中嵌套frameset frameset不要边框 当浏览器不支持框架时,noframes进行提示
- 框架iFrame只要竖滚动条,不要横滚动条
- 框架设计经验谈 -- 不要为框架作过多的假设
- html基础 frameset中嵌套frameset frameset不要边框 当浏览器不支持框架时,noframes进行提示
- html中 target 的所有 4 个值都以下划线开始。任何其他用一个下划线作为开头的窗口或者目标都会被浏览器忽略,因此,不要将下划线作为文档中定义的任何框架 name 或 id 的第一个字符。
- 框架设计经验谈 -- 不要为框架作过多的假设
- android 通过webView,简单的通过网页唤起本地界面,如果比较多的话最好不要用原生的webView和js去搭建,用框架去做
- 不要再使用JS框架了