ASP.NET Portal starter Kit ----重构DAL(SPL)

关于ASP.NET Portal starter Kit  www.asp.net 站点的描述是
  • ASP.NET Mobile Controls
  • Three-tier architecture with ASP.NET
  • Role Based Security

        个人感觉上它把DAL和中间的商务层是放在一起的。不能算是Three-tier,决定自己对 ASP.NET Portal starter Kit动动小手术,把DAL和中间层分出来,把原来的SQL数据库转换成Access的数据库。
         把SQL数据库转换成Acceess的数据库不知大家有没有注意一个问题。SQL数据库数据表Portal_Roles中的主键自动编号的标示种子是0,但是转换成Access的标示种子就是1开始,所以转换后的数据库需要手工修改一下,要么转换后的用户角色就会和原来的不匹配。

         数据库转换完毕剩下的就是在DAL把原有的SQL的存储过程转换成相关的SQL语句,在DAL你可以老老实实的自己写一个DAL的基类然后再此基础上进行数据操作,或者可以用DAAB也行。我在这里用听棠的SPL把数据库中的所有数据表映射成数据实体然后进行操作。因为我用的是VB.NET,smartrobot生成的数据实体类代码是基于C#的所以需要在原来的解决方案的基础上添加一个C#的项目命名为DALLib作为整个Portal的DAL。 project1.gif
并把相关的配置文件放置在Config目录下面,剩下操作都不难了,就只有数据表Portal_Discussion的存储过程转换的过程稍微繁杂一点。
例如

None.gif CREATE PROCEDURE  Portal_AddMessage
None.gif(
None.gif    
@ItemID int  OUTPUT,
None.gif    
@Title nvarchar(100 ),
None.gif    
@Body nvarchar(3000 ),
None.gif    
@ParentID int ,
None.gif    
@UserName nvarchar(100 ),
None.gif    
@ModuleID int
None.gif)   
None.gif
None.gif
AS  
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /* Find DisplayOrder of parent item */
None.gif
DECLARE @ParentDisplayOrder as nvarchar(750 )
None.gif
None.gif
SET @ParentDisplayOrder =  ""
None.gif
None.gif
SELECT  
None.gif    
@ParentDisplayOrder =  DisplayOrder
None.gif
FROM  Portal_Discussion 
None.gif
WHERE  
None.gif    ItemID 
= @ParentID
None.gif
None.gif
INSERT INTO  Portal_Discussion
None.gif(
None.gif    Title,
None.gif    Body,
None.gif    DisplayOrder,
None.gif    CreatedDate, 
None.gif    CreatedByUser,
None.gif    ModuleID
None.gif)
None.gif
None.gif
VALUES
None.gif(
None.gif    
@Title ,
None.gif    
@Body ,
None.gif    
@ParentDisplayOrder + CONVERTnvarchar(24), GetDate(), 21  ),
None.gif    
GetDate (),
None.gif    
@UserName ,
None.gif    
@ModuleID
None.gif)
None.gif
None.gif
SELECT  
None.gif    
@ItemID = @@Identity
None.gif
None.gif
None.gif
None.gif
None.gif
GO
None.gif

把原来的SQLConnection和Command换成以下的操作方法
ExpandedBlockStart.gif ContractedBlock.gif    Public Function AddMessage() Function AddMessage(ByVal moduleId As IntegerByVal parentId As IntegerByVal userName As StringByVal title As StringByVal body As StringAs Integer
InBlock.gif
InBlock.gif            
If userName.Length < 1 Then
InBlock.gif                userName 
= "unknown"
InBlock.gif
            End If
InBlock.gif
InBlock.gif            
Dim Disc As New Portal_DiscussionEntity
InBlock.gif
InBlock.gif            
If parentId = 0 Then
InBlock.gif                
'新插入
InBlock.gif
                With Disc
InBlock.gif                    .Title 
= title
InBlock.gif                    .Body 
= body
InBlock.gif                    .DisplayOrder 
= String.Format("{0:yyyy/MM/dd HH:mm:ss.fff}", DateTime.Now())
InBlock.gif                    .CreatedDate 
= DateTime.Now
InBlock.gif                    .CreatedByUser 
= userName
InBlock.gif                    .ModuleID 
= moduleId
InBlock.gif                
End With
InBlock.gif
InBlock.gif                Disc.Save()
InBlock.gif
InBlock.gif            
Else
InBlock.gif                
'回复
InBlock.gif
                With Disc
InBlock.gif                    .Title 
= title
InBlock.gif                    .Body 
= body
InBlock.gif                    .DisplayOrder 
= GetDisplayOrder(parentId) + String.Format("{0:yyyy/MM/dd HH:mm:ss.fff}", DateTime.Now())
InBlock.gif                    .CreatedDate 
= DateTime.Now
InBlock.gif                    .CreatedByUser 
= userName
InBlock.gif                    .ModuleID 
= moduleId
InBlock.gif                
End With
InBlock.gif
InBlock.gif                Disc.Save()
InBlock.gif            
End If
InBlock.gif
InBlock.gif            
Return Disc.ItemID
InBlock.gif
ExpandedBlockEnd.gif        
End Function

None.gif
ExpandedBlockStart.gifContractedBlock.gif        
Public Function GetDisplayOrder() Function GetDisplayOrder(ByVal ItemID As IntegerAs String
InBlock.gif            
Dim Disc As New Portal_DiscussionEntity
InBlock.gif            Disc.ItemID 
= ItemID
InBlock.gif            Disc.Retrieve()
InBlock.gif            
If Disc.IsPersistent Then
InBlock.gif                
Return Disc.DisplayOrder
InBlock.gif            
End If
ExpandedBlockEnd.gif        
End Function
基本上就这样,最后记得把Web.Config中的这句话去掉
None.gif   <add key="ConnectionString" value="server=localhost;Trusted_Connection=true;database=Portal" />

因为现在的连接字符串已经是在另外的配置文件DataBaseMap.XML中了.
个人觉得修改后的3层结构要更明晰一点。
首先项目DALLib作为整个解决方案的数据读取层,Portal项目中的Components文件夹中的类作为中间商务层,剩下的就是和实体映射相关配置文件和UI了。
上面的都是我个人的观点,错误的地方恳请大家指正。


相关链接:
ASP.NET Portal starter Kit ----页面配置文件之我见
asp.net Portal Starter kit----改造Portal的Html文本编辑器

转载于:https://www.cnblogs.com/Bruce_H21/archive/2005/09/13/235800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值