上一篇中对三层结构进行了整理,简要的说明了一下DAL、BLL、UI以及Model层。
下面详细对DAL层进行分析。
按照DAL数据处理层的说明,它包括了各种数据持久化的处理,包括数据库、本地文件、网络等等各种方式的数据持久化形式。显示中持久化方式非常灵活,有可能在各个不同的系统、业务、及部署实例都各不相同。要想系统能够适应这种灵活性就要考虑很多方面。
按照面相对象的系统设计方法。首先我们应该将功能整理起来形成接口。
因此DAL数据处理层应该有功能接口部分我们暂放在IDAL命名空间。我们以用户信息的持久化处理为例。首先得到以下接口
ok,上面的接口是用来存储和获取某用户的用户信息。那么,当BLL层涉及到这部分业务的时候只需要调用这个接口就可以了。我们分别于数据库、本地文件、网络三种方式实现了这个接口。
看下面的实现:
(1) 数据库实现
(2) 本地文件实现
(3) 网络实现以上类似。
现在的问题是接口有了,实现有了,我怎么去调用了?
在BLL层new一个本地实现的对象?或者new一个网络实现的对象?
显然不对,功能独立出来了却将调用功能弄成硬编码显然有悖面相对象。
那么,我们现在需要根据不同的需求创建实例。ok,回到设计模式的创建型模式了。有规可寻。
我们需要一个工厂来创建我们需要的类的实例。你只要拿出来你的需求,就可以根据你的需求返还给你类。
好吧,你的配置文件里有写哪个配网络、哪个配本地数据库、哪个配本地文件。
这样我们有如下的方法:
对,你的web.config是这样写的:
<add key="DAL" value="LocalFile"/>
这样子,我们可以再BLL层调用了,BLL层根本就不用管我是从哪里得到用户信息的。用户信息从哪里来对于BLL层是透明的,你配的是从本地文件来,那么它就是从本地文件的来的。
下面是调用时候的样子
IUserInfo ucontrol = DAL.Factory.DataAccess.CreateUserInfoInstance();
Model.UserInfo uinfo = ucontrol.GetUserInfoByID( uid );
uinfo.xx = xx;
uinfo.xxx = xxx;
ucontrol.SetUserInfo( uid, uinfo );
好了。一切都以做完,用户的要求满足了。
这就DAL层。