公司分层思想的演化历程

来源:www.cnblogs.com/wangsen/p/5052068.html

分层思想的演化是根据实际业务的需求不断改进而来的,下面就来讨论一下我们公司分层架构思想的演化历程:

第一阶段【大杂烩】

一开始我们做项目不会考虑很多东西直接一个项目搞定。

不管是后台管理系统,前端业务,还是用户登陆系统全部都放到了一个项目中去做。

第二阶段【webapp层】

按照上面的做法会遇到一个问题,如果其中用户登录出现错误就会全部不能够访问。

后来就要求将前端的业务,后台管理系统,以及用户登录要求分布,这个时候就采取分布式啦。

按照上面的做法的确可以实现三个不同的应用相互不受影响,即使后台挂啦,前台业务和登录也可以使用。

到目前为止webapp层就浮现啦,给该层的定义是:

为互联网用户提供对外服务,在这层的每一个项目都有自己不被共享的业务。

第三阶段【business层】

在实际应用中我们发现一个问题:

Aweb应用和Bweb应用中存在公用业务流程,怎么处理?

如图:

我们的做法是将a业务流程抽取出来。

如图:

比如:我们项目中课程项目和电视端视频课程项目都会使用订单相关的业务,那么我们的做法是将公用的业务单独创建一个项目(jar包)的形式,让web应用引用就行啦,当然这不是唯一的解决方案。

如图:

其实到这里我们另一个分层就出来啦:business层

给该层的定义:该层的项目必须是一个提供“共享”业务流程。

第四阶段【base层】

但是这么划分项目也引发了另外一个问题:

A business项目和B business同时共用一个资源的时候我们怎么做??

比如:订单business项目和单点登录business项目都需要使用到用户相关的服务,我们不可能每一个business项目都写一套相同的代码。

我的做法是将用户提供的相关服务单独作为一个项目,如:

其他项目可以引用用户提供服务的项目,如:

这样我们就已经解决了多个business项目共享同一份资源的问题,避免了每个应用都重复造轮子。

其实到这里我们的另外一个分层就出现了:base层

我们给该层的定义是:该层中的项目有且只能代表一个真实存在而且能独立存在的核心实体对应的业务。

详细解释一下:

真实存在:可以用一个具体的客观物体承载的,比较聚合的概念。比如:用户,课程,试题。

不是说一个用户实体就是对应一个base项目,而是我们在对用户进行面向对象分析和抽象的时候抽取出来的所有相关的

对象都属于这个base项目。

如:

这里的实体全部是与用户这个抽象概念有关的,比如:学生实体,老师实体,用户详细实体,用户实体等等。

第五阶段【core层】

在开发的过程中,我们发现不管是webapp层,business层还是base层都会用到一些和业务无关的服务。

比如:数据库持久,redis缓存,http封装,通用工具等。

我们根据这些服务的特征单独出去来多个项目,我们称之为这层为core层:

这层的定义:

这层的项目与业务没有关联的,只提供基础能力。

第六阶段【使用】

到现在webapp层,business层,base层以及core层已经划分完毕。

那么我们是如何使用这些的呢??

使用步骤如下:

分析一下,这个产品是否要对用户独立提供服务,不受其他的产品影响。如果要,则新建web项目。

分析一下,这个产品有没有哪些业务是准备被其他产品使用的,即在其他产品的界面有没有体现本产品。

如果有,分析一下这些公用的业务,有没有包含一个流程性,即它的业务在组合其他已有base项目。如果有,新建一个business项目

分析一下,这个产品有没有可以独立存在,不依赖于任何其他服务的业务。如果有,新建一个base项目。

当实现这些编码时,如果有遇到一些与业务无关的,只提供能力的,则新建一个core项目。

注意:

core层的任何项目其他层的项目都可以直接使用。

同一层的项目可以相互引用。

webapp层的项目不能相互引用,如果有想使用其他的项目服务,可以将那个服务下层到business层中实现。

上层可以跨层依赖下层,比如:webapp层中的项目不仅仅可以引用business层的项目也可以直接引用base层的项目。

PS:如果觉得我的分享不错,欢迎大家随手点赞、转发。

原文发布于微信公众号 - Java团长(javatuanzhang)

原文发表时间:2018-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。 在过去的工...

216100
来自专栏pangguoming

基于NodeJS的全栈式开发

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的...

34730
来自专栏一个会写诗的程序员的博客

基于NodeJS的全栈式开发(基于NodeJS的前后端分离)【转】

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的...

1.5K20
来自专栏鹅厂网事

大型互联网公司海量监控系统设计

"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网...

58380
来自专栏pangguoming

高性能Web服务端 PHP vs Node.js vs Nginx-Lua 的对比分析

1. ngx_lua nodejs php 比较 我在研究一阵子ngx_lua之后发现lua语法和js真的很像,同时ngx_lua模型也是单线程的异步的事件驱动...

93550
来自专栏SDNLAB

基于OpenFlow架构的IaaS云安全

编者按:云计算技术的服务型基础设施即服务(IaaS),以其可扩展性、高效性及弹性等特点正在成为资源利用的主导方式。在从云计算的IaaS应用获得便捷的同时,安全漏...

32230
来自专栏程序猿

【云计算知识普及】什么是CDN

云计算-CDN Content Delivery Network,缩写CDN,中文名字为内容分发网络 目的:使内容传输的更快、更稳定 原理思路:...

42350
来自专栏CSDN技术头条

基于Storm的实时计算应用实践

有赞使用storm已经有将近3年时间,稳定支撑着实时统计、数据同步、对账、监控、风控等业务。订单实时统计是其中一个典型的业务,对数据准确性、性能等方面都有较高要...

38280
来自专栏挖掘大数据

入门必读:Hadoop新手学习指导

零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易。从一开始什么都不懂,到能够搭建集群,开发。整个过程,只要有Linux基础,虚拟机化和java基...

29750

云原生应用的成熟度模型探讨

原文地址:https://dzone.com/articles/cloud-native-application

530100

扫码关注云+社区

领取腾讯云代金券