Dorian Deng-www.doriandeng.cn

追随理想和美人而生活

博客园 首页 新随笔 联系 订阅 管理
  95 Posts :: 0 Stories :: 204 Comments :: 77 Trackbacks

Nfx 是 .NET 藏经阁推出的一个轻量级的 .NET 应用框架,其详细内容请阅读类库简介。详细的信息,请查看:http://forum.entlib.net.cn/showtopic-1363.aspx
本文所谓的三层应用,是指广为流传的分为 UI BLL DAL 三层的系统,简单说明如下:
UI      - 用户界面,如 WinForm WebForm 等;
BLL  - 业务逻辑,整个系统的核心,一动则涉及整个系统,稳定后一般不轻易变化;
DAL  - 数据访问,所有的 SQL 语句都在这里。
另外,还有一个 Model 项目,存储所有的实体(只有属性)。
应用系统采用三层架构,主要是因为后期维护方便,比如以下的几个方面:
1) 如果是 BS CS 变换,只需要修改 UI 层;
2) 如果是数据库变换,只需要修改 DAL 层;
3) 业务不变,则 BLL 不变;
本文讲述的例子是一个会员资格管理系统,不深入业务内容,主要讲 Nfx 类库的使用和特点。例子解决方案如下图所示:


这里,项目之间的关系如下图所示( AàB 表示 A 依赖 B )

为了部署方便,也为了保证所有的 DLL 都在,UI 项目引用所有的项目,这样编译完后就不需要再另外拷贝了。
这里只写了一个 SqlDal 项目,随着时间增长,可能会出现 OracleDal 等其它项目,到时只需要更改配置文件,就可以改变运行时真正使用的 DAL 项目,咱们继续。

建立 Model 项目

Membership.Model 项目下建立 MemberInfo 类:

建立一个接口项目,是为了降低 BLL DAL 之间的耦合度。
Membership.IDal 项目下建立 IDataAccess 接口:

Membership.IDal 项目下建立 IMember 接口:

建立 SqlDal 项目

Membership.SqlDal 项目下建立 DataAccess 类:

Membership.SqlDal 项目下建立 Member类:

建立 Bll 项目

Membership.Bll 项目下建立 Bo 基类:

Membership.Bll 项目下建立 Member 类:

建立 UI 项目

Web.config configuration 元素内:


<
configSections>
  <
section name="dal" type="Nfx.Configuration.DalSection, Nfx"/>

</configSections>


<
dal default="sql">

  <add name="passportOracle" assembly="Membership.OracleDal" dataAccess="Membership.OracleDal.DataAccess" database="Oracle"

    connectionString="Data Source=******;User Id=******;Password=******;"/>

  <add name="sql" assembly="Membership.SqlDal" dataAccess="Membership.SqlDal.DataAccess" database="Sql"

    connectionString="Data Source=."SQLEXPRESS;AttachDbFilename=|DataDirectory|"Membership.mdf;Integrated Security=True;User Instance=True"/>

</dal>

增加引用
using Membership.Bll;
using Membership.Model;

调用方法如下:
Member.Add(new MemberInfo());

Nfx 类库的有关内容

SqlDao / OracleDao / OleDbDao / OdbcDao
这四个类是 DAL 项目中需要的基类,内部封装了一个静态的 Database 属性,可以直接访问数据库,写 Dao 时不需要关心如何连接数据库,内部通过配置文件的设置自动处理。
SqlDatabase / OracleDatabase / OleDbDatabase / OdbcDatabase
这四个类封装了访问数据库的方法,是 DbHelper 的另外一种封装,可以适当降低使用的复杂度和代码量。
TransactionScope
这个类与 System.Transactions.Transaction 同名,作用也是类似的;它们之间的区别在于 Nfx 的封装支持上述四个 Database 类的自动事务范围,是单连接、单事务的,不支持分布式事务,这主要是出于性能的考虑。相同的名称,在需要分布式事务时,可以达到只需要更改引用命名空间,不需要更改代码的效果。
Bo<TDataAccess>
这个类封装了一个静态的 DataAccess 属性,通过配置文件自动创建相应的对象。使用范型是因为 Nfx 无法获知 DataAccess 都需要提供哪些对象。我们可以封装一个自己的Bo基类进一步降低代码量,如上述例子。
Singleton模式
使用了 Nfx 类库,BLL DAL 项目中的类都可以使用 Singleton 模式,这样不需要每次都创建新的对象,CPU 和内存的使用量都会适当降低,效率和性能自然提高。创建 Singleton 对象,上面的例子里使用的是内部静态类的方法,这样是线程安全的,效率也比较高。由于存在继承关系,不能使用静态类,上面的例子使用了密封类 (sealed) 和私有构造函数,可以避免类被继承或创建另外不必要的实例。
DalSection 配置节
assembly - 程序集名称字符串, .NET 规范;
dataAccess - TDataAccess 的实现类的全名,包括命名空间;
database - Sql / Oracle / OleDb / Odbc 四选一;
connectionString - 完整的数据库连接字符串。



posted on 2008-06-16 12:10 Dorian Deng 阅读(885) 评论(2)  编辑 收藏 网摘 所属分类: .NETNfx

Feedback

#1楼  2008-06-17 18:56 SOSOS's BLog      
图片都显示不出呢?`
  回复  引用  查看    

文章开头的连接可以看到全部,还有示例下载
:)
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-16 12:14 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: