C#中winform,webform多层架构理解
2011-09-06 11:37
399 查看
学习了一个月了,对与C#的asp.net开发的多层架构的一点心得。
一般是说三层架构,即数据访问层,业务逻辑层和表示层。
但是当打开一个系统一看,哪怕是小小的一个系统也会不止三个文件,于是有人说三层结构中的“三”实为虚指而已。
其实不然,三层结构固然没有分得那么清楚,但是一个系统总会有个三层的思想吧
下面是我这个月学习所接触的一个系统的基本架构:
首先是一个实体类Entity,由PowerDesigner设计的数据表,拖拉到dbml文件中就ok了。这一步很简单,vs自动解决了后面的工序,自动生成一个DataContext类,此类中有你的表名加s的只读属性。如你的表名为table1的话,他会有:
public System.Data.Linq.Table<table1> table1s
{
get
{
return this.GetTable<table1>();
}
}
实例化DataContext就可以直接使用tables,表示table的一个集合。
其次还会自动创建table:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.table1", IsComposable=true)]……dbo.GetUserRole为表名。
public partial class table1 : INotifyPropertyChanging, INotifyPropertyChanged
{
}
此类中申明很多方法。数据访问层就不用自己做了。
第二就是接口Facade类,这个类引用实体类,当然其他的每个类都引用实体类。这个类定义了一系列的接口。可以说实体类定义了一个密封的数据的集合,是一个黑暗的屋子,那么接口就是在这个黑暗上面开几个窗。要存取数据就必须由窗口经过。接口类常用I开头,即Itable1.
public partial interface Itable1
{
bool method1();
int method2();
……
}
第三就是逻辑logic类了。他同样引用Entity,命名常为DAL结尾,即table1DAL。因为她实例化DataContext后就可以其中table1的方法了。常用的方法:
InsertOnSubmit()
SingleOrDefault()
SubmitChanges()
Delete()等,配合linq to sql 语句让代码简单。
然而让我疑惑的是他实现了Facade的所有方法,然而并没有引用或者继承他(?)。
第三就是business类,他引用了Entity、Facade和Logic。并继承了接口Itable1类。
public partial class table1Mgr : Itable1
{
}
同时,还要在配置文件中unity.config中<container>下增加语句:<type type="Itable1" mapTo="table1Mgr" ></type>
他同样实现了Facade的所有接口,模式如下:
public object method1(int variable1, ...)
{
using (**DataContext context = new **DataContext())
{
table1DAL t = new table1(context);
return t.method1(int variable1, ...);
}
}
最后就是表示层,即呈现在我们面前的。对于webform就是WEB层,对于winform就是UI层。他引用Entity、Facade和Business层。主要是Facade的引用是因为同一个接口可能会有多种实现,即多种logic层。如果引用logic则可能引起冲突。
所以需要实例化接口 private Itable1 table1Mg;
比如说:
/// 接口
public interface iExample
{
public void DoSomething();
}
/// 逻辑类A
class ClassA:iExample
{
void DoSomething()
{
throw new Exception("The method or operation is not implemented.");
}
}
/// 逻辑类B
class ClassB:iExample
{
void DoSomething()
{
throw new Exception("The method or operation is not implemented.");
}
}
/// 客户端
class Client
{
private void Run()
{
iExample a = new ClassA();
a.DoSomething();
iExample b = new ClassB();
b.DoSomething();
}
}
所以总的看来,这个系统的三层的对应关系就是:Entity已经实现了数据访问的功能,Facade(?)、Logic和Business共同完成业务逻辑层,表示层最清楚了。
疑问:
1.Business实现了Facade的所有方法,然而并没有引用或者继承他?
2.Facade接口应该划入那一层?
一般是说三层架构,即数据访问层,业务逻辑层和表示层。
但是当打开一个系统一看,哪怕是小小的一个系统也会不止三个文件,于是有人说三层结构中的“三”实为虚指而已。
其实不然,三层结构固然没有分得那么清楚,但是一个系统总会有个三层的思想吧
下面是我这个月学习所接触的一个系统的基本架构:
首先是一个实体类Entity,由PowerDesigner设计的数据表,拖拉到dbml文件中就ok了。这一步很简单,vs自动解决了后面的工序,自动生成一个DataContext类,此类中有你的表名加s的只读属性。如你的表名为table1的话,他会有:
public System.Data.Linq.Table<table1> table1s
{
get
{
return this.GetTable<table1>();
}
}
实例化DataContext就可以直接使用tables,表示table的一个集合。
其次还会自动创建table:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.table1", IsComposable=true)]……dbo.GetUserRole为表名。
public partial class table1 : INotifyPropertyChanging, INotifyPropertyChanged
{
}
此类中申明很多方法。数据访问层就不用自己做了。
第二就是接口Facade类,这个类引用实体类,当然其他的每个类都引用实体类。这个类定义了一系列的接口。可以说实体类定义了一个密封的数据的集合,是一个黑暗的屋子,那么接口就是在这个黑暗上面开几个窗。要存取数据就必须由窗口经过。接口类常用I开头,即Itable1.
public partial interface Itable1
{
bool method1();
int method2();
……
}
第三就是逻辑logic类了。他同样引用Entity,命名常为DAL结尾,即table1DAL。因为她实例化DataContext后就可以其中table1的方法了。常用的方法:
InsertOnSubmit()
SingleOrDefault()
SubmitChanges()
Delete()等,配合linq to sql 语句让代码简单。
然而让我疑惑的是他实现了Facade的所有方法,然而并没有引用或者继承他(?)。
第三就是business类,他引用了Entity、Facade和Logic。并继承了接口Itable1类。
public partial class table1Mgr : Itable1
{
}
同时,还要在配置文件中unity.config中<container>下增加语句:<type type="Itable1" mapTo="table1Mgr" ></type>
他同样实现了Facade的所有接口,模式如下:
public object method1(int variable1, ...)
{
using (**DataContext context = new **DataContext())
{
table1DAL t = new table1(context);
return t.method1(int variable1, ...);
}
}
最后就是表示层,即呈现在我们面前的。对于webform就是WEB层,对于winform就是UI层。他引用Entity、Facade和Business层。主要是Facade的引用是因为同一个接口可能会有多种实现,即多种logic层。如果引用logic则可能引起冲突。
所以需要实例化接口 private Itable1 table1Mg;
比如说:
/// 接口
public interface iExample
{
public void DoSomething();
}
/// 逻辑类A
class ClassA:iExample
{
void DoSomething()
{
throw new Exception("The method or operation is not implemented.");
}
}
/// 逻辑类B
class ClassB:iExample
{
void DoSomething()
{
throw new Exception("The method or operation is not implemented.");
}
}
/// 客户端
class Client
{
private void Run()
{
iExample a = new ClassA();
a.DoSomething();
iExample b = new ClassB();
b.DoSomething();
}
}
所以总的看来,这个系统的三层的对应关系就是:Entity已经实现了数据访问的功能,Facade(?)、Logic和Business共同完成业务逻辑层,表示层最清楚了。
疑问:
1.Business实现了Facade的所有方法,然而并没有引用或者继承他?
2.Facade接口应该划入那一层?
相关文章推荐
- C#开发中多层系统架构的应用及讨论
- C# 将数据导出到Excel汇总Webform,Winform(转)
- 重写代码生成器支持模板(多层架构,MVC),多语言c#,java;支持mysql和sqlserver,动态编译
- 适当使用enum做数据字典 ( .net c# winform csharp asp.net webform )
- WinForm下多层架构的实现(转)
- WinForm下多层架构的实现
- c#多层架构
- .net中webform和winform连接sql server 2000数据库的c#操作类
- 浅谈MVC架构在Dot NET WinForm应用程序开发中的应用(C#)
- ZedGraph:一个同时支持WinForm和WebForm的开源图表控件(基于LGPL协议,.NET 2.0 C#源代码)
- C#之WinForm基础 画扇形时,出现的从X轴到扇形的第一条边沿顺时针方向的角怎么理解
- 重写代码生成器支持模板(多层架构,MVC),多语言c#,java;支持mysql和sqlserver,动态编译
- C# winform 和Webform 给DataGridView 和DataView 添加行号
- WinForm下多层架构的实现(转)
- [c#]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现
- c#读取xml文件配置文件Winform及WebForm-Demo具体解释
- WinForm下多层架构的实现
- 当前目录c# winform和webform
- C#WinForm App自动更新(Live Update)架构
- Flash与c# socket通信,win2003,webForm,winForm