PetShop的业务逻辑层的类文件在Components文件中,我怎么找不到数据层呢?
解决方案 »
- 如何点击母板页中的linkbutton,传递值到子页面的MultiView呢?
- 有关于Reflect反射问题
- 再次求助!asp.net引用外部DLL问题
- 求一条SQL查询语句
- 连接数据库出错,出现一下问题怎么解决啊?
- sqlserver行列转换
- 请问ASP1.1和2.0的区别,学习是否要从1.1学起?
- ||||||||||||||||||||||||||||||自定义模板(继承ITemplate)的问题|||||||||||||||||||||||||||||||||
- 菜鸟问题:关于命名空间
- 水晶报表 CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败 错误
- 为什么更新DataGrid时,取不到TextBox中修改后的值,取到的只是修改前的数据?
- 如何禁用快捷键?
用RunProc函数读取数据
从图中可以看到系统大体分为Presentation,Business Logic,Data Access 三层,每层中又有子层。每层(也包括子层)各司其职,又互相协作,本文顺序以此图为准,从下到上分析。 对应上图,具体的.NET Project实现列表(借用MS文章中的列表不用翻译了吧)Project
Purpose
BLL
Home for business logic components
ConfigTool
Administration application used to encrypt connection strings and create event log source
DALFactory
Classes used to determine which database access assembly to load
IDAL
Set of interfaces which need to be implemented by each DAL implementation
Model
Thin data classes or business entities
OracleDAL
Oracle specific implementation of the Pet Shop DAL which uses the IDAL interfaces
Post-Build
Project to run post compile actions such as adding assemblies to the GAC or COM+
Pre-Build
Project to remove assemblies from the GAC or unregister assemblies from COM+
SQLServerDAL
Microsoft SQL Server specific implementation of the Pet Shop DAL which uses the IDAL interfaces
Utility
Set of helper classes including a wrapper for the DPAPI
Web
Web pages and controls
Solution Items
Miscellaneous items used to build the application such as Pet Shop.snk key file used to sign application assemblies
http://www.surfsky.com/bbs/myfiles/7.bmp 这个本来想在分析BLL层时再说,但是在SqlServerDAL和OracleDAL中都使用了这些Model,无论怎么样,上层的程序执行最终结果都是要操作数据库,而数据库是关系型,不是面向对象的,那就得把平面的‘表’结合业务规则抽象成类,这样想办法让上层(BLL及以上)以为自已在操作类而不是数据库表,从而使‘它们’感觉没有数据库的存在,上层只管面向对象编程就可以了。类似现在所说的O-R MAPPING,但O-R MAPPING比这种简单的数据到对象的持久化要复杂。据说可以在表结构有变化的情况下,上层应用程序代码不用更改,只要改O-R MAPPING的相关设置就可以了。 上面第2节中已看到Petshop的SqlServerDal和OracleDal中定义的sql语句,然后根据上层的调用,把sql语句传给SqlHelper执行,再来看看SqlServerDal的一段程序: private void SetAccountParameters(SqlParameter[] parms, AccountInfo acc) { parms[0].Value = acc.Email; parms[1].Value = acc.Address.FirstName; parms[2].Value = acc.Address.LastName; parms[3].Value = acc.Address.Address1; parms[4].Value = acc.Address.Address2; parms[5].Value = acc.Address.City; parms[6].Value = acc.Address.State; parms[7].Value = acc.Address.Zip; parms[8].Value = acc.Address.Country; parms[9].Value = acc.Address.Phone; parms[10].Value = acc.UserId; }parms[x]就是那些有声明为常量的有参数的Sql语句中的参数,这里用Model中的AccountInfo的各Field和这些参数Mapping。所以对于BLL层,只知道这些Model就可以了,反正最后在SqlServerDAL或是OracleDAL中Model的成员们会Mapping到参数中以存取数据库(为什么不直接Mapping到数据集的字段呢?我想应该是因为这里数据库操作直接给SqlHeper的原因,不然就没必要用SqlHelper了。于是才又多了图中的xxx DAAB层,这样Mapping给参数再传给DAAB来处理) Data Access Layer总结: DAL完成数据库访问任务,上层(BLL)直需调用接口即可,不用知道具体访问细节,用Factory模式来实现,使用运行时读取web.config的方法来得到连接配置信息,最后选用SqlServerDAL或OracleDAL之一的相对具体子层,同时使用SqlHelper或OraHelper之一来完成数据库操作。
http://www.microsoft.com/china/community/Column/67.mspx讲的很详细,看一遍就会有大概的了解了。