BLL层即业务逻辑层,是处理业务逻辑判断的,可是这个判断是放到一个方法里还是分成多个方法呢?
题目说的“方法单一”即在BLL层里存放多个方法(有主方法和辅助方法,主方法调用辅助方法),是每个方法都有单一的功能;而“单一方法”即在BLL层中只存在一个主方法。
注:“主方法”:窗体需要调用BLL层的方法;“辅助方法”:例如一些判断,需要被主方法调用。
有些人可能会认为业务逻辑层不就是处理那些复杂的判断吗?那我写的越复杂岂不是越好?
下面我们就以充值卡为例,通过代码来看看到底哪个好?(窗体需要调用的是AddUser方法)
一、“方法单一”实现:
''' <summary> ''' 添加用户 ''' </summary> ''' <param name="entityUser">用户信息</param> ''' <returns>添加是否成功</returns> ''' <remarks>2011-4-11 19:41 by dan</remarks> Public Function AddUser(ByVal entityUser As userInfo) As Boolean Dim iuser As Iuser Dim result As Boolean iuser = DataAccess.CreateUser() If Not (IsExist(entityUser)) Then '插入用户信息 If iuser.Insert(entityUser) Then result = True Else result = False End If Else result = False End If Return result End Function ''' <summary> ''' 判断用户是否已存在 ''' </summary> ''' <param name="entityUser">用户信息</param> ''' <returns>返回“True”则已存在,“False”为不存在</returns> ''' <remarks>2011-4-11 19:41 by dan</remarks> Public Function IsExist(ByVal entityUser As userInfo) As Boolean Dim iuser As Iuser Dim result As Boolean iuser = DataAccess.CreateUser() '判断该用户是否已注册 If Not IsNothing(iuser.Check(entityUser)) Then result = True MsgBox("该用户已存在!", vbOKOnly + vbInformation, "提示") Else result = False End If Return result End Function
二、“单一方法”实现:
''' <summary> ''' 添加用户 ''' </summary> ''' <param name="entityUser">用户信息</param> ''' <returns>添加是否成功</returns> ''' <remarks>2011-4-11 19:41 by dan</remarks> Public Function AddUser(ByVal entityUser As userInfo) As Boolean Dim iuser As Iuser Dim result As Boolean iuser = DataAccess.CreateUser() If Not IsNothing(iuser.Check(entityUser)) Then '插入用户信息 If iuser.Insert(entityUser) Then result = True Else result = False End If End If Return result End Function
“方法单一”的好处:
1、符合“开放——封闭”原则
也许这只需一个判断还不是很明显,试想如果有三四个或者更多的时候,使用“单一方法”是不是就太复杂了,所有的判断都要写到一个方法里,修改起来非常困难;而使用”方法单一”则容易很多。
3、功能单一,符合“单一职责”原则:
每个方法只实现一种功能,完全符合“单一职责”原则。
2、可隐藏不必要的方法:
如果大家不想让窗体层看到它不需要调用的方法,我们只需将它们定义成private即可。