您的位置:首页 > 产品设计 > UI/UE

分享一个UI与业务逻辑分层的框架(一)

2016-08-31 09:06 267 查看

序言

.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方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐