今天和朋友聊软件开发技术的架构,聊到了目前JavaWeb应用所用的一些技术,比如高可用、高并发、高性能以及一些软件NGINX、MyCat、Keepalived等等,这些软件在我目前所做的项目中都还没有用到,然后又聊到这软软件的技术的和使用场景等等问题。
又聊到了Web开发的演变历史。从最开始的客户端请求—>服务器响应,到现在的分层设计,几乎可以清晰的看到软件技术演变的逻辑。一开始的客户端请求—>服务器响应模式是最基本的,也是最简单的,相当于最初的模型,用户在浏览器端请求什么,服务器端就返回什么。这时的代码可以说是都在一个文件中,比如xxx.html、xxx.jsp,还没有相对结构化的框架。
而随着业务的发展,这样的系统已经不能满足需求了,然后厉害的人就提出了改进和尝试,比如能不能把一个文件中的部分代码分离出来单独做成一个模块,这样清晰且易于处理。于是设计出了更好的分层模式,于是这样的开发方式就被遇到同样问题的程序员们所接受,慢慢的就演变出了一些常用的框架模型,比如Web开发里常用的三层架构、MVC模型等等。
表现层(UI),通俗讲就是展现给用户的界面,对应项目中的Web层包含Servlet和Controller等。
业务逻辑层(BLL):也称作领域层,负责系统业务逻辑的处理,对应项目中Service和ServiceImpl等。
数据访问层(DAL):该层所做事务直接 *** 作数据库,针对数据的增添、删除、修改、更新、查找等,对应项目中的Dao。
在提出该分层架构的时代,多数系统往往较为简单,本质上都是一个单体架构(Monolithic Architecture)的数据库管理系统。这种分层架构已经是Client-Server架构的进化了,它有效地隔离了业务逻辑与数据访问逻辑,使得这两个不同关注点能够相对自由和独立地演化。
在开源技术框架中,表现层实现的代表作品是Struts1/2、Spring MVC,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate和Mybatis。
MVC模型的框架说实话在我刚接触JavaWeb项目开发的时候我并不知道这框架的好处,或者说不知道为什么要这样写,那时我只会看着前辈们的代码依葫芦画瓢。直到做了几年JavaWeb的开发,对这些框架用的也多了,慢慢也熟悉了,才有点感觉。而在用用其他语言开发的类似框架时才发现它们是类似的,只是实现的代码不同而已,这时我才明白为什么会这样设计。
而要理解为什么会这样,最好的方法就是去看它的演变历史,当你从最开始的起点看起,顺着时间方向看到现在,就会看到它的这个发展逻辑,自然为什么要那样,而不是这样也清晰了。
再说到现在的软件开发技术、不如高可用、高并发、高性能、微服务等等,如果只是去看这些名称,感觉很高大上,看到后会让你感觉很难、很牛逼的样子,自己好像要具备很强的能力才能去搞这些技术。而实际上,如果你从软件开发演变的角度去看时,它们其实并没有多难,也没有多牛逼,这些技术产生也只是为了解决目前在软件开发中所遇到的问题而已,而随着时间的推移,肯定会遇到更复杂的业务场景,也会遇到更牛逼的技术和框架出现。
而如果你了解了底层的思想或者演变的逻辑,就会很清晰的看到它只是这个行业在发展中的一步而已。而这个底层的思想或者演变的逻辑,在我看来是非常简单的。这种底层的思想或演变的逻辑会体现在很多不同的技术框架上,你只要对比看,就能看出来。
回到上文中的一开始的提到的客户端请求—>服务器响应的模式,你就会发现,现在的技术开发框架,都是在这两个环节中不断细分出来的,两层、三层、四层等等。而目的只是让系统保持正常运行,比如:一个业务系统,一开始只有10人用10人请求,半月后有1000人请求,三个月后用户指数增长,同一时刻,出现10万人同时请求,那么你要在系统出现不同数量级请求下都要保持稳定可访问,比如我们的12306购票系统。一开始简单的设计就不能满足需求了,这时你就要进行技术上的升级尝试,于是你就会用到一些听上去很高大上的技术。而这些技术的目的,其实只有一个,就是解决现存的问题,满足需求。
而前文提到的分层思想,就是一种不错的解决思路,通过分层,逐级扩大并行处理量来达到目的,一开始文中所提到的一些技术,软件等等都只是某一次中所用到的技术而已,它们是解决某个方面的问题的。这种分层思想在软件架构方面用的很广泛,比如我们熟悉的TCP/IP协议就是分层模型。
而在我们理解了分层思想后,对于具体的业务需求和对应的技术的选型就清晰了,分层思想在软件架构中是特别常用的一种架构方式。分层架构是一个很可靠的架构模式。它适合大多数的应用。如果你不确定在项目中使用什么架构,分层架构是再好不过的了。
其实纵观整个软件发展史,你会发现总是需求在推动着技术的发展迭代。
参考文献:
0、软件设计的演变过程 - 简书
1、软件架构之分层架构 - 知乎
2、JavaWeb之MVC模式 - HuaToDevelop - 博客园
3、软件架构分层,你的项目处于什么阶段? - 知乎
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)