我以前参与过多个软件架构设计和开发工作,其中两种模式非常典型。
仅针对参与过的项目分析优缺点,并不是模式本身的优缺点进行分析。
1、多进程模式,通过管道方式进行通信。
优点:每个模块之间相互独立,排查问题就会相对简单。
新同事接入项目不需要获取全部代码或者了解过多的架构、文件结构方面的知识。
缺点:有点规模的项目就会启动很多进程,同时重新启动某一个模块相对麻烦。
各个模块之间交互相对复杂,前后关联性由于架构设计问题耦合度较高,对于新同事继续参与项目或者后续外围功能开发并不是很友好。
2、单进程模式。
优点:进程数量固定可控,模块之间的交互成本和难度较低。
缺点:排查问题相对困难,且会出现难以定位问题所在的情况。
新同事介入需要了解很多信息,比如代码组织结构等等。
结合两种模式的经验设计了一种新的软件框架。
单进程+多域+服务的方式。
基本原理:signalr作为本地服务实现域之间的通信,切面模式实现监听属性改变事件,参考QT里面信号槽的概念,扩展c#版本的信号槽功能。
结合四个基础功能,实现模块之间的极致解耦。
属性变化=》切面模式获取属性改变事件=》signalr广播传递事件=》接受信号并通过信号槽(发送事件信号)=》执行注册的槽监听事件。
目前这个框架已经完成初版,接下去几篇文章我会陆续介绍,并开源出来。