软件分层架构下的另类设计框架-工厂模式的使用

软件分层的原因

    面向对象原理中,有多态,继承等相关概念。为了提高程序的“高内聚、低耦合”。也为了更容易扩展,容易维护,同时适应程序的延展性能,开始产生了分层的概念。

现有常见设计模式

  • 普通三层架构

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();
        }
    }
Input

计算

 /// <summary>
    /// 负责运算过程
    /// </summary>
    public class Function
    {
        public event Action OnCalcFinished;

        public virtual void Calculate()
        {
            if (OnCalcFinished != null)
                OnCalcFinished();
        }
    }
Calculate

输出

/// <summary>
    /// 负责输出操作
    /// </summary>
    public class Output
    {
        public virtual void Write()
        { 
        }
    }
Output

 

接口的继承

继承于输入接口

  public class InputTest : Moudle.Input.Input
    {   
        public override void ReadConfig()
        {
            base.ReadConfig();
        }
    }
InputTest

继承于计算接口

 public class FunctionTest:Module.Function.Function
    {
        public override void Calculate()
        {
            base.Calculate();
        }
    }
CalculateTest

继承于输出接口

public class OutputTest:Module.Output.Output
    {
        public override void Write()
        {
            base.Write();
        }
    }
OutputTest

 

接口的调用

 

 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();
        }
Dispatch

 

通过以上内容,实现了自定义的一个框架模式,在一个完整项目周期中,我们可以按照不同的需求派生出子类实现不同的业务。

posted on 2014-02-12 17:15  即使很偶然  阅读(1611)  评论(2编辑  收藏  举报