首先需要说明为什么要分层?这样做会有什么好处?
解耦:通过代码分层实现“高内聚”和“低耦合”,每个层、模块间在功能上独立
扩展性/可维护性强:因为各层及模块间功能相互独立,没有严格依赖关系,所以它的扩展性/可维护性比较强
移植性:每一层都实现指定功能,与其他模块通过指定接口建立联系,所以移植起来比较方便
问题简单化:通过功能逐步细化,可以把复杂的功能简单化,简化代码实现
复用性强:因为各模块功能相互独立且可相互调用,所以代码复用性较强
三层架构介绍
三层架构是一个比较典型的分层思想,它们分别是:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
表现层: 实现了和用户交互的功能,比如一些数据或者界面的交互
业务逻辑层:这是整个系统的核心,所有的逻辑判断以及数据处理都在这一层实现
数据访问层:实现了数据存储和读取,比如数据库的增、删、查、改
由三层架构设计嵌入式分层
嵌入式开发的核心就是芯片,它提供固定的片内资源共开发者使用。而且它具有一个很重要的特点就是,不随项目的需求变动而变动。所以应将其作为最底层,为上层提供基础支持。我们将其命名为 硬件抽象层(Hardware Abstract Layer)
芯片有了当然还不够,通常我们会在片外扩展一些功能模块来满足具体的项目需求,例如:传感器、键盘、LCD屏、片外存储等。这一层的特点是,随项目的变动而以模块为单位动态增减。这一层的运作需要芯片内部资源的支持,所以应处于硬件抽象层之上,并为上层调用。我们将其命名为扩展外设层(Expand Peripherals Layer)
根据嵌入式产品的特点和三层架构的结合分析,可得到嵌入式代码框架分层结构如下:
* * * * * * * * * * * * * * * * * * * *
* 应用接口层 *
* * * * * * * * * * * * * * * * * * * *
* 逻辑处理层 *
* * * * * * * * * * * * * * * * * * * *
* * 扩展外设层 *
* * * * * * * * * * * * * * * * *
* 硬件抽象层 *
* * * * * * * * * * * * * * * * * * * *
硬件抽象层:屏蔽对SFR的操作细节,为上层提供简单、清晰的应用接口
扩展外设层:根据项目需求可以动态增加或去掉这一层的功能模块单元
note:硬件抽象层和扩展外设层包括了整个系统涉及到的硬件单元模块,我们在封装这部分模块功能接口时需要严格区分它们之间的界限。每个单元之间都必须做到完全独立的状态,分别实现模块需要对外提供的最基本的功能接口。如果在整个系统中模块之间有相互调用的逻辑,必须通过上层代码“间接”调用,避免底层模块之间的耦合
逻辑处理层:整个系统的逻辑/数据处理都在这里,是整个系统的核心。这层的效率和稳定性也直接影响了系统性能,所以无论是概要设计/详细设计/代码实现,每个环节都需要着重处理这部分。
应用接口层:负责和应用层成交互,提供功能接口。
设计原则:
1.下层只需为上层提供调用接口,不能有逻辑上耦合关系。另外在调用下层接口时,也最好通过异步调用方式解耦
2.每一层或每一个功能模块都要以“高内聚”、“低耦合”为理念
3.下层接口需要对上层屏蔽自己的实现细节
解耦:通过代码分层实现“高内聚”和“低耦合”,每个层、模块间在功能上独立
扩展性/可维护性强:因为各层及模块间功能相互独立,没有严格依赖关系,所以它的扩展性/可维护性比较强
移植性:每一层都实现指定功能,与其他模块通过指定接口建立联系,所以移植起来比较方便
问题简单化:通过功能逐步细化,可以把复杂的功能简单化,简化代码实现
复用性强:因为各模块功能相互独立且可相互调用,所以代码复用性较强
三层架构介绍
三层架构是一个比较典型的分层思想,它们分别是:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
表现层: 实现了和用户交互的功能,比如一些数据或者界面的交互
业务逻辑层:这是整个系统的核心,所有的逻辑判断以及数据处理都在这一层实现
数据访问层:实现了数据存储和读取,比如数据库的增、删、查、改
由三层架构设计嵌入式分层
嵌入式开发的核心就是芯片,它提供固定的片内资源共开发者使用。而且它具有一个很重要的特点就是,不随项目的需求变动而变动。所以应将其作为最底层,为上层提供基础支持。我们将其命名为 硬件抽象层(Hardware Abstract Layer)
芯片有了当然还不够,通常我们会在片外扩展一些功能模块来满足具体的项目需求,例如:传感器、键盘、LCD屏、片外存储等。这一层的特点是,随项目的变动而以模块为单位动态增减。这一层的运作需要芯片内部资源的支持,所以应处于硬件抽象层之上,并为上层调用。我们将其命名为扩展外设层(Expand Peripherals Layer)
根据嵌入式产品的特点和三层架构的结合分析,可得到嵌入式代码框架分层结构如下:
* * * * * * * * * * * * * * * * * * * *
* 应用接口层 *
* * * * * * * * * * * * * * * * * * * *
* 逻辑处理层 *
* * * * * * * * * * * * * * * * * * * *
* * 扩展外设层 *
* * * * * * * * * * * * * * * * *
* 硬件抽象层 *
* * * * * * * * * * * * * * * * * * * *
硬件抽象层:屏蔽对SFR的操作细节,为上层提供简单、清晰的应用接口
扩展外设层:根据项目需求可以动态增加或去掉这一层的功能模块单元
note:硬件抽象层和扩展外设层包括了整个系统涉及到的硬件单元模块,我们在封装这部分模块功能接口时需要严格区分它们之间的界限。每个单元之间都必须做到完全独立的状态,分别实现模块需要对外提供的最基本的功能接口。如果在整个系统中模块之间有相互调用的逻辑,必须通过上层代码“间接”调用,避免底层模块之间的耦合
逻辑处理层:整个系统的逻辑/数据处理都在这里,是整个系统的核心。这层的效率和稳定性也直接影响了系统性能,所以无论是概要设计/详细设计/代码实现,每个环节都需要着重处理这部分。
应用接口层:负责和应用层成交互,提供功能接口。
设计原则:
1.下层只需为上层提供调用接口,不能有逻辑上耦合关系。另外在调用下层接口时,也最好通过异步调用方式解耦
2.每一层或每一个功能模块都要以“高内聚”、“低耦合”为理念
3.下层接口需要对上层屏蔽自己的实现细节
4.下层为上层提供调用接口,且是单向调用。也就是说只能上层应用调用下层接口