本文通过讲解
微内核架构模式,
API/SPI设计原则,动态脚本语言,分解合成在软件设计中的应用,讲述如何构造一个具备较好可扩展性的软件系统。
先讲一下提纲:
1.软件系统划分原则
2.一个简单软件系统到复杂软件系统的架构演变过程,以建立网站软件系统为例
3.软件扩展点如何设计及时机
软件系统划分原则
1.
分层:这个是大家都熟悉的原则,把相同职责的类划分到同一层,如负责展示的表现层,负责控制业务逻辑的控制层,负责处理业务逻辑的业务逻辑层,负责取数的数据访问层等。
2
.业务抽象程度:按照业务相关性来划分,通常会按业务无关,业务通用,领域通用,特定领域等来划分。
3.
功能划分:同一职责的类中可以再按功能来划分,比如同样是读数据,有的类是读站点数据,有的类是读模板数据等等。
根据以上三个原则我们可以把一个复杂的系统分解为简单的各个系统单元。
一个软件系统的演变过程(以建站系统为例)
1.简单就是美,先看一下我们的最简单网站应用架构,如下图
2.框架大了肯定要分层,下面看一下框架变大后的架构图,如下图
这时框架已经根据业务抽象程度进行了划分,一个建站框架无非就是由核心容器(这个参考
微内核架构模式,这里指的容器就是微内核容器)、业务无关、业务通用三层构成,可以被所有应用所复用。
3.我们再看一下网站业务层的进一步划分,如下图
一个网站无非就是由显示站点数据和装修站点数据组成。
4.我们进一步划分显示站点数据逻辑,如下图
显示站点数据,如果使用模板来渲染的话,无非就是先读站点资源(如模板,*.vm文件)和读站点数据,然后用模板渲染引擎渲染站点数据。
5.到这时我们系统是不是还很简单,很容易懂。看一下整体架构图
6.按照这种方式,我们业务越来越复杂,系统也变得越大,最后总的架构图可能如下:
7.以上的架构图看起来已经比较复杂了,我们可以形象一点来看,其实还是最初我们的简单架构图,只不过我们能看到架构图内部更细的架构。
软件扩展点如何设计及时机
1.
如何设计扩展点
(1)
插件:在微内核设计中,每个插件都是扩展点,而且也是最大的扩展点,所以在设计系统时采用了微内核架构就是已经具备可扩展设计了。但此时的扩展点太大,复用性不高。
(2)
SPI:为了弥补插件扩展大点的不足,我会把插件的实现以API/SPI方式实现,SPI是中小粒度扩展点。
把大小扩展点合起来,看一下设计图
(3)
动态脚本语言:为了提高更加扩展性,我们在SPI实现过程里可以采用调用动态脚本语言来处理扩展点,这样大大提高了软件扩展点的活性,软件扩展点不再是单一的用java类实现。由于是动态脚本语言,于是可以在运行过程中动态编译脚本并执行,这样的好处是当扩展点逻辑变更时只要更改动态脚本就可以变更业务逻辑,而无须重新打包软件重新发布。这样在面向服务的软件当中,服务可以用动态脚本来写,可以动态升级软件服务。
2.
何时设置扩展点
软件扩展点多大才好呢?其实是越小越好,最好是不用,如果整个组件都能复用那说明无须扩展点,但在所有业务领域中是不可能的,需求是不断地变,业务也在不断的更改。所以一般软件扩展点是从大中小粒度上都分别具有扩展点,但这样软件系统就变得很复杂。
根据经验给出以下几个原则。
1.
主要业务流程设置扩展点
2.
熟悉业务后,如果基本确定会变化的可以提供扩展点
3.
业务发展到一程度时小重构并设置扩展点
总结:
一个可扩展的软件系统并不是一开始就把所有扩展点都考虑好,但可以把所有服务都设计为最大的扩展点(可以采用微内核架构模式),这样便于在单个服务小重构设计新扩展点时不会影响其它服务,架构才不会因开始可扩展最后走向腐烂。
同时为了减少软件复杂性,可扩展设计要采用统一方式,如SPI这种方式,以便在扩展时不会因不同扩展点要不同方式扩展而使系统变得更架复杂化。
- 大小: 4.4 KB
- 大小: 9.9 KB
- 大小: 5.7 KB
- 大小: 11.5 KB
- 大小: 39.4 KB
- 大小: 61 KB
- 大小: 40.8 KB
- 大小: 35.9 KB
分享到:
相关推荐
AngelScript是一款开源的、类C/C++的脚本引擎,它允许开发者在应用程序中嵌入自定义的脚本语言,从而实现灵活的逻辑控制和动态行为。版本2.17.2是其一个重要里程碑,它在稳定性和性能上都得到了显著提升,同时保持了...
L4微内核编程API是操作系统设计中的一个重要概念,它为开发者提供了与微内核进行交互的接口。L4内核是一种高效、小巧且安全的微内核,其设计目标是将最小化的核心功能(如进程管理、内存管理和通信机制)放在内核...
OKL4是一款基于L4微内核架构的操作系统平台,主要设计用于安全关键和嵌入式系统的高效、灵活以及可验证的系统软件。这个“okl4_3.0微内核源码”包含了OKL4 3.0版本的全部源代码,对于想要深入理解L4微内核原理、系统...
标题"MCP23S17_spi扩展io_spi接口IO扩展_spi扩展io芯片_MCP23S17STM32_mcp23_"提到了几个关键概念,包括MCP23S17,SPI扩展IO,SPI接口,以及与STM32微控制器的关联。MCP23S17是一款由Microchip Technology制造的16位...
这款语言的核心设计理念是追求超轻量级、微内核结构,同时具备跨平台能力和强大的可扩展性,使得它在处理日常开发中的琐碎任务时能够更加高效。 1. **轻量级与微内核架构**: Boby脚本语言的轻量级特性体现在其...
综上所述,SPI串口的内核实现涉及到硬件描述语言Verilog的设计,Linux内核驱动的编写,以及SPI协议的规范理解。在实际应用中,开发者需要根据具体的硬件平台和设备需求,灵活运用这些知识来实现高效的SPI通信。
### Linux内核之spi与iic驱动详解 ...对于初学者而言,通过实践SPI驱动的开发,不仅可以加深对Linux内核的理解,还能提高解决实际问题的能力。希望本文能帮助读者更好地掌握Linux SPI驱动的开发技巧。
在Linux系统中,SPI(Serial Peripheral Interface)是一种用于设备间串行通信的接口,常用于连接微控制器与其他外围设备,如传感器、LED驱动器、闪存等。SPI通信模式涉及主机(Master)和从机(Slave),其中主机...
- **模块化设计**:微内核的设计允许将系统服务分解成独立的组件,每个组件可以在不影响其他组件的情况下进行升级或替换。 - **易于调试**:由于大多数服务不在内核空间运行,当某个服务出现问题时,可以更容易地...
SPI是一种同步串行接口,常用于连接微控制器和其他外围设备,如传感器、显示器、存储器等。本教程将详细介绍如何在Linux应用层使用C语言编写SPI程序,并通过一个名为"spidev-test"的示例程序来阐述关键步骤。 1. ...
微内核设计的另一个优点是可扩展性。由于每个服务都在自己的进程中运行,因此添加或修改服务不会影响到内核的其他部分。这意味着开发者可以更容易地为FreeNOS添加新的功能,或者根据需求调整已有的服务。 在FreeNOS...
这种设计的主要优势在于高度的可扩展性和灵活性,使得系统可以根据实际需求动态地添加或移除功能模块。 ##### 2. 阅读本文所需基础知识 - **理解WfMC的工作流参考模型**:WfMC(Workflow Management Coalition)定义...
- 注意事项:通常情况下,直接在 Zend 引擎内进行扩展并非最佳选择,因为它涉及到语言核心级别的修改,需要更深入的理解和谨慎处理。 #### 如何编写第一个扩展 为了帮助初学者快速入门,我们先来看一个基础但能够...
本文将深入探讨基于微内核的文件服务器如何利用多线程技术提升性能,并阐述相关的设计原理和实践策略。 微内核架构的核心思想是将操作系统的基础服务(如进程管理、内存管理和网络通信)精简到最小,仅包含必要的...
《Linux内核API完全参考手册》中分析的内核API模块包括:内核模块机制API、进程管理内核API、进程调度内核API、中断机制内核API、内存管理内核API、内核定时机制API、内核同步机制API、文件系统内核API和设备驱动及...
这个“ZYNQ 7010实现SPI读写数据驱动(SDK驱动)”项目提供了在ZYNQ 7010平台上开发SPI驱动的实例,涵盖了SPI接口的理解、SDK驱动库的构建方法以及驱动程序的测试流程,对于理解和实践ZYNQ 7010的嵌入式软件开发具有...
在SPI IP内核的设计中,Verilog被用来创建一个可复用的模块,这个模块能够作为一个独立的组件在不同的系统中使用,以实现SPI接口功能。 SPI协议通常包括四个主要信号线:MISO(Master In, Slave Out),MOSI...
9. **模块化设计**:为了实现可扩展性,微内核会将非核心功能如文件系统、网络协议等设计为独立模块,以便于加载和卸载。 深入学习这套源码,不仅可以掌握51单片机的底层编程,还能理解微内核的运作原理,对于想要...
微内核(Microkernel)是一种操作系统架构,其中操作系统的核心功能被设计为小型、独立的服务,运行在用户态,而非传统的单一大型内核运行在核心态。这种设计旨在提高系统的安全性和稳定性,因为任何内核服务的故障...
STM32系列是意法半导体(STMicroelectronics)推出的一系列基于ARM Cortex-M内核的微控制器,具有高性能、低功耗的特点,广泛应用于工业控制、消费电子、医疗设备等多个行业。 STM32L431RCT6是一款32位微控制器,...