博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
界面与后台逻辑完全分离,单例模式,接口
阅读量:4492 次
发布时间:2019-06-08

本文共 3469 字,大约阅读时间需要 11 分钟。

界面与后台逻辑完全分离的方法可以防止我们绕过很多坑,避免很多错误,下面我自己总结下:

首先我们实现前台界面是这样的一个界面:实现点击添加的时候,把文本框的东西添加到list中,点击显示和添加后显示的是一样,点击新窗体的时候,实现form1 的数据。其实我们可以用一个中间的变量,传给新窗体,我们现在不用这种方法,我们用如下方法:

我们准备数据源,添加一个Testdata类,一开始的时候,我们不继承接口,只是单纯的一个Testdata类,这个数据是测试数据,插入代码:

public class Testdata : ITruedata//测试数据    {        List
_datas = new List
() { "test 1","test 2"}; public void Add(string item) { _datas.Add("test" + item); } public string[] Select() { return _datas.ToArray(); } }

form1的后台代码逻辑,为了方便,我把整个代码拷贝下来,添加了注释说明,输入如下代码:

///     /// 界面与数据完全分离。form1到form2,保留数据,    ///     public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }  //方法改变只要更改这个声明即可,不需要修改其他的,实现了完全分离        ITruedata  data = MyClass.data;        ITruedata data1 = MyClass.data1;        ///         /// 添加按钮        ///         ///         ///         private void BtnAdd_Click(object sender, EventArgs e)        {            //load              data.Add(DateTime.Now.ToString());            //show            listBox1.DataSource = data.Select();                }        ///         /// 显示按钮        ///         ///         ///         private void BtnShow_Click(object sender, EventArgs e)        {            listBox1.DataSource = data.Select();        }        ///         /// 新窗体按钮        ///         ///         ///         private void BtnWin_Click(object sender, EventArgs e)        {            Form2 fm = new Form2();            fm.ShowDialog();        }        ///         /// 添加2        ///         ///         ///         private void button1_Click(object sender, EventArgs e)        {            data1.Add(DateTime.Now.ToString());            //show            listBox1.DataSource = data.Select();        }        ///         /// 新窗体2        ///         ///         ///         private void button2_Click(object sender, EventArgs e)        {            Form2 fm = new Form2();            fm.ShowDialog();        }    }

我们在form2中,只有一个列表,我们把form1界面的值传给form2,

form2的代码:

public partial class Form2 : Form    {        public Form2()        {            InitializeComponent();        }      ITruedata data =MyClass.data;        private void Form2_Load(object sender, EventArgs e)        {            //load             var data1 = data.Select();            //show            listBox1.DataSource = data1;        }    }

我们把数据类提取成接口,只声明不实现,在派生类下实现:

public interface ITruedata //数据接口    {        void Add(string item);        string[] Select();    }

我们可以把测试数据改为真实的数据,Truedata一开始的时候也是单纯的一个类,我们不加继承接口,假如真实的数据是这样的:

public class Truedata : ITruedata//真     {        List
_datas = new List
() { "i'm 1","i'm 2"}; public void Add(string item) { _datas.Add(item); } public string[] Select() { return _datas.ToArray(); } }

最重要的一点,就是建一个类,声明静态的,保证只实例化一次,也可以用单例模式,这样才能保证新窗体的数据不改变,

public class MyClass    {        ////旧的不提取接口        //public static Truedata data1 = new Truedata();        ////新的        //public static Testdata data = new Testdata();            //提取接口        //旧的        public static ITruedata data1 = new Truedata();        //新的        public static ITruedata data = new Testdata();    }

 

总结如下图:上面的黑色的是很多个窗体,bag是单例模式或者是接口,下面是各种数据库的连接,这样可以实现一个程序可以实现多个数据库的切换,凑时间我写一个实现多个数据库连接的例子

 最下面这个图,就是我以上的的代码总结。

 

 

转载于:https://www.cnblogs.com/aijiao/p/10206248.html

你可能感兴趣的文章
Socket
查看>>
正则表达式之 数据验证 与 文本替换
查看>>
RPC是什么?
查看>>
CLR via C#:CLR的执行模型
查看>>
JS获取服务器时间
查看>>
如何对数据排序和拆分文件
查看>>
数据解析01-15
查看>>
linux 安装mysql数据库——yum安装法
查看>>
Several ports (8005, 80, 8009) required by Tomcat v6.0 Server at localhost are already in use
查看>>
事件监听器
查看>>
设计模式之单例设计模式
查看>>
异常的基本概念
查看>>
vue 在发送axios请求时数据渲染问题
查看>>
动态链接库dll
查看>>
2018 Multi-University Training Contest 3 - HDU Contest
查看>>
组合数取模(转载)
查看>>
9.2NOIP模拟题
查看>>
整合SpringDataJpa
查看>>
vue过渡
查看>>
tcpreplay 博客目录
查看>>