科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB.NET分层开发的几点心得

VB.NET分层开发的几点心得

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

随着微软.NET开发平台的推出,无疑给无数的VB开发者带来了福音......

作者:邹源 来源:作者授权 2007年11月9日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
五、Facade层

  提供更高层次的业务逻辑处理,一般是当表现层的某个操作需要关连到多个模块时由这层提供一个统一的接口,但并不要求表现层必须调用这层来处理业务逻辑。

  六、事务的处理(Transaction)

  采用手工处理事务的方式,由于所有的业务层都是Serviced component,因此我们可以直接利用COM+中的事务功能,虽然Serviced component有点性能损耗,但在分布式的结构中还是会带来很多方便的,我将所有的业务层的事务属性设为Required,具体代码如下:

<Description ("Contains methods for inserting and updating product records in the berp system."), Guid ("4FE02C4F-C8FA-497c-9A9E-EDA0877B772C"), Transaction (TransactionOption. Supported), Synchronization (SynchronizationOption.Required), JustInTimeActivation(True)>

Public Class Product

Public Function Add() As Boolean

'…………

If ContextUtil.IsInTransaction Then

ContextUtil.SetComplete()

Else

ContextUtil.SetAbort()

End If

'…………

End Function

End Class

  系统中的其它层不需要作为Serviced component

  七、异常的处理

  彻底改变了VB6中的错误处理方式,这点我最喜欢,哈! 项目中的异常分为两种,业务异常和系统异常:

  1、业务Exception:

  从ApplicationException中继承,有一个总的Exception,然后各个模块的Exception都是从总的Exception中继承,从而形成了一个层次结构:

ApplicationException

ProjectException

Module1Exception

Module1Concret1Exception

Module2Concret2Exception

……………

Module2Exception

……………

  2、系统异常,报出的错误,包括数据库报出的:

  异常捕捉的原则是只捕捉需要的错误,因材在数据访问层和业务层不需要Catch所有的错误,如下:

Public Function Methoda()

IF …… THEN

If ContextUtil。IsInTransaction Then

ContextUtil.etAbort()

End If

Throw Module1Concret1Exception

End If

……

Catch 需要的具体的错误Module2Concret1Exception

'这里不需要 Catch ProjectException

End Function

  为了便于调试,需要把系统异常记录在日志文件中,这里用的MS提供的Exception Management Application Block 来实现的,具体的实现方式见MSDN,下载地址是:

http:www.icrosoft.om/downloads/details.spx?FamilyId=8CA8EB6E-6F4A-43DF-ADEB-8F22CA173E02&displaylang=en

  在界面显示错误信息的时候为两种显示方式,一种是用来显示业务异常的,一种界面是用来显示系统异常的,代码如下:

Public Sub Button_OnClick()

Dim objblModule As 业务层

Try

ObjblModul.osomething()

Catch ProjectExcption

'显示一个定制的页面()

Catch Exception

'call Exception Management. Publish method to log the exception

'显示另一个定制的页面,定制的页面有将具体的错误信息发送到administrator的功能,就象windows的错误页面

End Try

End Sub

  八、权限控制

  这是一个值得深入讨论的问题,我采用的方式是用FORM认证的方法,具体的用户信息,权限是放在数据库中,并没有集成WINDOWS的域认证,实现的时候用专门的层来执行权限判断,利用GeneralPrincipal 和GeneralIdentity对象 ,代码片段如下:

Public Function CheckRole(ByVal strRole As String) As Boolean

Return privateUserPrincipal.IsInRole(strRole)

End Function

Private Sub InitPrincipal()

Try

privateUserIdentity = New GenericIdentity(privateUserName)

privateUserPrincipal = New GenericPrincipal(privateUserIdentity, privateUserRoles)

Catch e As Exception

Throw New Exception("an error occurred setting credentials")

End Try

End Sub

Private Sub SavePrincipal()

Try

If Not IsNothing(_context) Then

context.Session("UserName") = privateUserIdentity.Name

context.Session("Roles") = privateUserRoles

context.User = privateUserPrincipal

End If

Catch e As Exception

Throw e

End Try

End Sub

  这样一来当界面变成WINDOWS的FORM是就不需要改动很多代码了,同时为了解决将权限放到SESSION中引起的延时问题,我将用户的权限信息放在服务端的XML文件中,然后直接中XML文件中获得数据,任何对用户信息的修改都将改变相应的XML文件,这样效率高于从数据库获得。

  当然在实际开发中还会碰到很多其他问题,如报表,打印,并发性等,如果大家有兴趣可以和我联系,限于个人水平有不足之处请多多包含。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章