查看: 2385|回复: 29

谈谈软件分层架构形式--为什么要分层、优弱点、分层方式

  [复制链接]

7

主题

19

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2019-9-20 18:49:44 | 显示全部楼层 |阅读模式
概述

这么多年大巨细小也做了很多软件项目,明天首要闲谈下软件的分层架构形式。

为什么要分层?

犹记得高中数学教员说碰到困难的时辰一定要分化,把复杂的题目拆成一步一步来做,做着做着就会发现很难的题目就处理了,即使处理不了,按步也是可以给到很多分的...实在就是把一个复杂的题目分化成为多少个简单的题目来停止处置,这样要比处理一个复杂的题目简单。

同理,在设想一个复杂的软件系统的时辰,我们也凡是利用的一个技术就是分层,每个层只负责完成本身的功用,最初,一切的层整合起来组成一个复杂的软件系统。

在利用软件开辟中,N层利用软件模子是一种典型的软件系统架构,也就是所谓的分层架构。N层的利用软件系统,由于其众多的优点,已经成为典型的软件系统架构,也已经成为构建企业软件的标准。 其中最典型的也就是三层架构。

分层也是计较机技术中的常用方式,一个典型的例子就是TCP/IP技术的OSI七层模子。

软件分层架构优弱点

分层的法式设想带来的益处以下:

1.高内聚低耦合,便于团队开辟

内聚:一个模块内各个元素相互连系的慎密水平;

耦合:一个软件结构内分歧模块之间关联水平的怀抱。

在团队开辟中,分层可以让软件开辟职员专注于自己负责的层,而不必关心其他层的设想,也不必担忧自己的设想会影响别的层。假如不分层,底子不成能停止团队开辟,只会一团糟。

2.使软件升级和保护更加轻易

分层设想使得法式结构清楚,升级和保护都变得非常轻易,变动层的具体实现代码,只要层接口连结稳定,其他层可以不必点窜。即使层的接口发生变化,也只影响上层和下层,点窜工作量小而且毛病可以控制,不会带来意外的风险。

分层式结构也不成避免具有一些缺点:

1.下降系统性能

假如不采用分层式结构,很多营业可以间接造访数据库,以此获得响应的数据,现在却必须经过中心层来完成。

2.偶然会致使级联的点窜

偶然会致使级联的点窜。这类点窜特别表现在自上而下的偏向。假如在暗示层中需要增加一个功用,为保证其设想合适分层式结构,能够需要在响应的营业逻辑层和数据拜候层中都增加响应的代码。

3.代码量变多

分层后代码量自然要比不分层多。

项目分层方式

1. 按种别(合适小型项目)

在 Android 开辟早期,很多项目都是依照种别分层的,就是依照 activity、fragment、adapter 等来停止分层,依照种别停止分层的项目标目录结构大如果下面这类:

相信大师对这类结构很是熟悉,这类分层方式的益处是:
    简单了然,很轻易晓得每个子包下寄存的是什么。一旦项目采用这类分层方式,未来项目不管怎样迭代和变化,目录结构都不需要做太大的修改。

但这类方式弱点也是很明显的,假如项目太大,有上百个界面,那末在 activity 子包下会有上百个类,那样要定位到具体某个功用模块的 activity 会变得很困难,也就是说这类方式不够邃密,随着项目迭代功用越来越多,会致使代码导航越来越困难。

2. 按功用(合适中大型项目)

这类分包方式是依照模块分别的,同一功用模块相关的类都在一个文件夹下,项目标目录结构大要以下:

以上的分层可以看到有一个叫feature的包,这里面包括了 app 的一些功用,如 freshnews、login别离代表 app 内部的新颖事、登录等一些功用模块,这类按功用模块的分层益处很明显:
    很直观,可以很方便的按照 app 的功用模块定位到具体的代码。扩大性杰出,假如想在此根本上再依照 MVC、MVP的形式去进一步分层,大概想在此根本上再依照种别去分层,仍然可以,只需要 feature 包下某个具体的功用下面再加一层就行了。高度的模块化,也就是所谓的“高内聚”。随着 app 的迭代,假如 app 过于庞大,想要实现插件化、组件化,这类分层形式可以省很多事。

可是这类方式也有一些弱点,比若有些项目早期功用一向在变化,假如依照功用木块分别,会致使项目结构一向在变化。另一方面,假如项目很小,自己就没几多界面,依照这么分层感受颗粒度太细,有点牛鼎烹鸡的感受。

实在系统的架构设想是改良耦合的最好方式。架构设想的本质,就是分别耦合的单元(分别模块)和标准耦合的形式(代码耦合的形式有很多种,如间接挪用、事务响应、消息行列等)。

前面会分享更多devops和DBA方面的内容,感爱好的朋友可以关注下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:50:33 | 显示全部楼层
转发了
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:50:41 | 显示全部楼层
把复杂的项目分层,相当于发复杂抽象的事件和行为在设计逻辑上规范化,有利于团队合作开发,将来的调试和维护也更规范。
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:50:51 | 显示全部楼层
Mark
回复

使用道具 举报

8

主题

17

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2019-9-20 18:51:33 | 显示全部楼层
转发了
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:52:09 | 显示全部楼层
转发了
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:53:06 | 显示全部楼层
转发了
回复

使用道具 举报

497

主题

1万

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22507
发表于 2019-9-20 18:53:25 | 显示全部楼层
转发了
回复

使用道具 举报

9

主题

6698

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13405
发表于 2019-9-20 19:28:17 来自手机 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

9

主题

6747

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13503
发表于 2019-9-20 22:28:51 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表