软件分层的原因
面向对象原理中,有多态,继承等相关概念。为了提高程序的“高内聚、低耦合”。也为了更容易扩展,容易维护,同时适应程序的延展性能,开始产生了分层的概念。
现有常见设计模式
- 普通三层架构
User Interface 表示层
与用户展示界面交互,提供数据内容
Business Logic Layer,数据层
用于给表示层提供数据内容,对数据运算和操作,同时也负责响应表示层的事件。
Data Access Layer 数据访问层
直接操作数据库,针对数据的增添、删除、修改、查找等。
- MVC
模型(Model):就是封装数据和所有基于对这些数据的操作。
视图(View):就是封装的是对数据显示,即用户界面。
控制器(Control):就是封装外界作用于模型的操作和对数据流向的控制等。
使用工作方法构建我们自己的应用框架
这将会是一个新颖的设计架构模式,在整体上运算和逻辑上拆分,每个运算模块只负责相应的数据。分成三个逻辑运算,读取,运算,输出。这个优势在于每个模块只做一部分功能,不会影响其他功能,以提高代码复用率,降低耦合度;更加有利于扩展调配。例如我们可以派生多个子类运算,子类运算可配置为并发或顺序运行。
工厂方法接口
输入
/// <summary> /// 用户读取配置和数据库文件等 /// </summary> public class Input { public event Action OnReadFinished; public virtual void ReadConfig() { if (OnReadFinished != null) OnReadFinished(); } }
计算
/// <summary> /// 负责运算过程 /// </summary> public class Function { public event Action OnCalcFinished; public virtual void Calculate() { if (OnCalcFinished != null) OnCalcFinished(); } }
输出
/// <summary> /// 负责输出操作 /// </summary> public class Output { public virtual void Write() { } }
接口的继承
继承于输入接口
public class InputTest : Moudle.Input.Input { public override void ReadConfig() { base.ReadConfig(); } }
继承于计算接口
public class FunctionTest:Module.Function.Function { public override void Calculate() { base.Calculate(); } }
继承于输出接口
public class OutputTest:Module.Output.Output { public override void Write() { base.Write(); } }
接口的调用
static void Main(string[] args) { Input input = new InputTest(); input.OnReadFinished += new Action(input_OnReadFinished); input.ReadConfig(); } static void input_OnReadFinished() { Function function = new FunctionTest(); function.OnCalcFinished += new Action(function_OnCalcFinished); function.Calculate(); } static void function_OnCalcFinished() { Output output = new OutputTest(); output.Write(); }
通过以上内容,实现了自定义的一个框架模式,在一个完整项目周期中,我们可以按照不同的需求派生出子类实现不同的业务。