|
概述
这么多年大巨细小也做了很多软件项目,明天首要闲谈下软件的分层架构形式。
为什么要分层?
犹记得高中数学教员说碰到困难的时辰一定要分化,把复杂的题目拆成一步一步来做,做着做着就会发现很难的题目就处理了,即使处理不了,按步也是可以给到很多分的...实在就是把一个复杂的题目分化成为多少个简单的题目来停止处置,这样要比处理一个复杂的题目简单。
同理,在设想一个复杂的软件系统的时辰,我们也凡是利用的一个技术就是分层,每个层只负责完成本身的功用,最初,一切的层整合起来组成一个复杂的软件系统。
在利用软件开辟中,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
|