您的位置:首页 > 运维架构 > 网站架构

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接口应该划入那一层?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: