zoukankan      html  css  js  c++  java
  • 分享一个UI与业务逻辑分层的框架(一)

    序言                                                                               

    .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButton三种UI控件进行简单粗暴的UI与业务逻辑分层实现。

    背景

    软件行业发展至今,分层的思想可谓是深入人心。企业应用架构模式中三层架构的思想早以众人皆知,MVC的框架正在引领着WEB开发的潮流。但在MES系统开发这块,虽然众多厂商均标榜自身产品皆采用分层架构,但细究下也只是框架上做到了分层,在粗粒度上还是会出现混层的情况。从笔者近年来接触的MES系统来看真正做到细粒度的分层基本上可以说是没有。尤其是WINFORM这块,UI与业务逻辑基本上是混杂在一起,给单元测试和代码重用带来了极大的困难。不仅在产品上有这样的情况,在程序员教育上也存在同样的问题。君不见,21天入门到精通系列基本上都是UI和业务逻辑混杂在一起,初级程序员基本上也都是一个窗体文件加一个CS文件直接解决问题。

    原因分析

    • UI与业务逻辑代码写在一起,简单粗暴。

    • UI与业务逻辑分层的难度和技巧要求较高,特别是在WINFORM下。(ASP.NET下还有MVC框架)

    框架简介

    框架参照Mediator模式(隐式中介模式)进行UI与业务逻辑分离,支持TextBox,CheckBox,RadioButton三种UI控件,生成UIMediator.dll。

    项目中通过引用UIMediator.dll使用。

    框架演示

    • UI界面说明

    如上所示:From1为UI,txtName为TextBox控件,cbCheck为CheckBox控件,rbButton1、rbButton2为RadioButton控件。

    • 新建后台逻辑类

    新建From1Class为后台(业务逻辑)类,继承IPropertyChange(命名空间UIMediator)接口并实现方法,如下代码所示:

    复制代码
     public class Form1Class : IPropertyChange
        {
    
            public event EventHandler PropertyChanged;
    
            public void UpdateUI()
            {
                PropertyChanged(null, null);
            }
    
        }
    复制代码
    • 在后台逻辑类定义与UI控件相对应的属性

    复制代码
         private string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            private bool check;
            public bool Check
            {
                get { return check; }
                set { check = value; }
            }
    
            private bool radio1;
            public bool Radio1
            {
                get { return radio1; }
                set { radio1 = value; }
            }
    
            private bool radio2;
            public bool Radio2
            {
                get { return radio2; }
                set { radio2 = value; }
            }
    复制代码
    • 在Form1代码内关联UI与业务逻辑类

     Form1Class fc = new Form1Class();
    • 在Form1窗体加载事件中绑定UI控件与业务逻辑类属性

       private void Form1_Load(object sender, EventArgs e)
              {
                  MediatorManager.Bind(txtName, fc, "Name");
                  MediatorManager.Bind(cbCheck, fc, "Check");
                  MediatorManager.Bind(rbButton1, fc, "Radio1");
                  MediatorManager.Bind(rbButton2, fc, "Radio2");
              }

     应用

    • UI输入-->后台属性

    不用写代码,UI控件的输入或选择能及时被后台业务逻辑类的属性所感知

    • 后台属性-->UI显示

    在后台业务逻辑类中驱动UI显示时只需要调用UpdateUI方法

  • 相关阅读:
    【BZOJ4520】[Cqoi2016]K远点对 kd-tree+堆
    【BZOJ2843】极地旅行社 离线+树链剖分+树状数组
    【BZOJ3251】树上三角形 暴力
    SQL学习笔记三(补充-3)之MySQL完整性约束
    SQL学习笔记三(补充-2)之MySQL数据类型
    SQL学习笔记三(补充-1)之MySQL存储引擎
    SQL学习笔记二之MySQL的数据库操作
    SQL学习笔记一之初识数据库
    深入理解Python中的元类(metaclass)
    Web安全之BurpSuite抓取HTTPS请求
  • 原文地址:https://www.cnblogs.com/huangmianwu/p/5824527.html
Copyright © 2011-2022 走看看