code小生,一个 Android 领域技术分享平台

作者:Android草根王
链接:https://www.jianshu.com/p/30bfa1f73532
声明:本文是 Android草根王 原创,转发等请联系原作者授权。

定义

软件架构是指:对于软件的各个方面做出的设计决定,包括行为上的和结构上的。

结构上:
表示产品如何划分多个部分,以及这些部分之间的关系。

行为上:
包括外部行为和内部行为。
外部行为描述了产品如何与用户、其他系统、外部设备进行交互。
内部行为描述了产品组件之间的交互接口。

注意:
架构可作为一个名词也可作为一个动词。
作为名词,表示一组抽象、规则,即产品的结构约束,像蓝图或构建规范的文档等,它描述了要构建的对象;
作为动词,表示制作这些抽象、规则的过程;

架构与设计的关系

架构是设计的一部分,通过抽象突出了一些细节,而忽略了另一些细节。

突出的细节:如结构、行为规则、组件如何装配、应用规则等;
忽略的细节:组件如何具体设计、开发等;

架构主要的关注点

功能性

软件向用户提供哪些功能?

可变性

软件将来可能需要哪些改变?哪些可能不需要改变?

性能

软件期望将来达到怎样的性能?

容量

多少用户使用?需要为多少用户保存数据?

可构建性

如何构建成一组组件?能够独立的实现、验证、复用等

模块化

如何将软件任务分解成独立的模块?支持独立开发等

安全性

数据安全如何保证?权限控制?抵挡攻击?等

生态系统

与其他系统、设备如何交互?

好的架构

对于一个软件进行架构,架构师通常的做法是折中。
他们除了考虑基本的功能需求和品质需求外,还需要考虑投入的成本(人力、财力、时间等等)。所以架构设计是否最优,没有一个绝对的答案或正确答案。

从我们的经验来说,应该对架构进行评估,确定它是否满足我们的需求。
可以通过对架构师提出质询来评估架构,寻找架构不能满足品质关注点的风险,架构师解释如何支持各个场景。
也可以确定架构的属性,通过建模或模拟系统的一个或多个方面,判断架构是否满足。

类库、框架、设计模式、架构概念区别

在一些常规项目的开发过程中,多少都会提到上面几个词汇,
那么,他们之间具体的区别是什么呢?

类库

也可称为工具库,是为解决某一问题而进行的封装。
作用:使开发者摆脱底层编码(不必重复制造轮子),专注特定问题和业务逻辑,给程序员带来了方便。

框架

相对工具库更宏观,是一组协同工作的类,在某种程度上控制整体的结构和流程,是服务于业务的。
作用:使设计者在特定领域重用整体设计(不必重复制造轮子),也是为程序员带来编码约束的。

设计模式

是针对一类问题提出的行之有效的解决方案。
作用:对开发者而言,是思想上(问题解决方案)的重用,但只是针对局部。

架构

是一个软件的最高层次的整体结构和规划。
相对设计模式而言,是针对软件整体的“解决方案”。
一个架构可能包含多个(0 ~ n)框架和多个(0 ~ n)工具库,
一个框架可能包含多个(0 ~ n)设计模式。

  1. 一个架构可能包含多个(0 ~ n)框架和多个(0 ~ n)工具库
    例如:
    一个java web项目,可包含spring/springmvc + hibernate/mybatis + ……等多个框架;
    工具库就更多了,如:JSON库、XML库、日期库、图片库等;

  2. 一个框架可能包含多个(0 ~ n)设计模式。
    普通开发中,常见的框架模式有很多种,如MVC/MVVM/MVP/MTV/CBD等。
    MVC是一种框架模式而非设计模式,通常,MVC可看做3个设计模式:观察者模式、策略模式和组合模式的合体。
    -- 框架是大智慧,用来对软件设计进行分工;
    -- 设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,减低耦合度。
    自己写的代码也可以包含多个(0 ~ n)设计模式,只是本章节对比的是类库、框架、设计模式、架构概念区别。

参考:

《架构之美》
《企业架构应用》
……

本文参考了多份资料,比较概念化,如有问题的地方,请及时指正。



更多相关文章

  1. Android开源测试框架
  2. 剖析 Android(安卓)架构组件之 ViewModel
  3. Android中常用的设计模式
  4. Android:Animation 使用手册
  5. Android系统架构剖析
  6. Android(安卓)TV框架TIF
  7. Android(安卓)动画框架的基本原理
  8. 使用greenDao操作本地数据库,Android9.0读取数据库失败的问题解决
  9. Android上实现MVP模式的途径

随机推荐

  1. mysql导入csv的4种报错的解决方法
  2. MySQL数据库重命名的快速且安全方法(3种)
  3. 解决MySQL8.0时区的问题步骤
  4. MySql8 WITH RECURSIVE递归查询父子集的
  5. 详解MySQL的sql_mode查询与设置
  6. 解决seata不能使用mysql8版本的问题方法
  7. Nacos配置MySQL8的方法
  8. mysql建表常用的sql语句汇总
  9. mysql中操作表常用的sql总结
  10. MySQL数据库事务与锁深入分析