查看原文
其他

程序员朋友们,为什么我不建议你一上来就学框架!

以下文章来源于码农翻身 ,作者刘欣

点击上方 "程序员小乐",关注公众号

8点20分,第一时间与你相约

每日英文

Is there such guy that once made you madly think of him and now you are trying so hard to forget.

有没有那么一个人,曾经让你发了疯的想,现在却拼了命的想忘掉。


每日掏心话

要相信,这个世界美好总要多过阴暗,欢乐总要多过苦难,还有很多事,值得你一如既往的相信。


来自公众号码农翻身 | 责编:乐乐

图片来自网络


往日回顾:推荐一款MacOS下超实用开源的文本编辑器



   正文   



问:有两年多前端经验,但感觉自己对后端知之甚少,没有安全感。但是后端语言又多,不知道学哪一门性价比好一些,求教。


语言不是重点,尤其是你已经会一门语言的情况下,后端编程最最基本的技术是这些


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等技术来解决。


写了这么多,我想说的是:后端广阔天地,大有可为 !就看你想前进到哪一步了 !

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。


欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。


猜你还想看


阿里、腾讯、百度、华为、京东最新面试题汇集

Spring是如何运用设计模式的?

推荐几个IDEA插件,Java开发者撸码利器

推荐一位大佬,前IBM软件架构师

聊一聊新生代和老年代垃圾回收的细节

用 Python 一键分析你的上网行为, 看是在认真工作还是摸鱼

关注「程序员小乐」,收看更多精彩内容
嘿,你在看吗?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存