用vb.net重构版机房收费系统之分层、接口、数据库连接、反射+工厂2015-07-02分层分层是为了减少层与层之间的依赖,增加程序的可读性,让整个系统结构清晰明确,还可大大降低维护成本,但是分层也有一定的缺点,有些可以直接访问数据库的层,却要通过负责访问数据库的层进行访问,这样,在访问数据库过程中就多出一个环节,增加了系统的开销,有时候要在表示层增加某个功能,为了降低耦合,就不得不自上而下,在每一层里面增加这个功能所需的服务类,这样就增加了开发成本分层越多越好吗?答案是否定的,引用一句话“我们也要 时刻谨记:不能盲目分层,不应分层而分层不应模式而模式。这是很重要的。不然只能增加开发的负担(在今后的实践中更好的体会)。”应该是说要根据实际的情况进行分层,毕竟不是绝对的,因为有些系统不分层比分层有点更多一些。基本的分层主要用的是三层架构:表示层(UI)主要用于与用户的交互,负责传达用户的指令以及数据给BLL层,并把用户需要的数据显示出来,通俗的讲就是用户能见到的界面,如窗体程序。业务逻辑层(BLL)对数据的逻辑处理,比如把访问数据库得到的数据,转换成用户向看到的数据,并提交给表示层进行显示。数据访问层(DAL)对数据库进行访问,提供增删改查等操作。下面是我的包图,每个包就是一个层,其中增加了实体层(Model)、接口层(IDAL)和工厂层(Factory)

实体层(Model)实际上就是对应的数据库里面的每一张表,一个表就建一个类,一个类里面的属性则是对应表里面的字段,比如表BaseData_Info

在实体层中,就可以这样建立一个类:
Public Class BaseDataEntityInherits EntityPrivate FixedUserHalfHourCost As Single"固定用户半小时花费Public Property FixdUserHalfHourCost_ As SingleGetReturn FixedUserHalfHourCostEnd GetSet(value As Single)FixedUserHalfHourCost = valueEnd SetEnd Property Private CasualUserAnHourCost As Single "临时用户一小时花费Public Property CasualUserAnHourCost_ As SingleGetReturn CasualUserAnHourCost End GetSet(value As Single)CasualUserAnHourCost = valueEnd SetEnd Property Private IncreasingUnitTime As Single"单位递增时间Public Property IncreasingUnitTime_ As SingleGetReturn IncreasingUnitTimeEnd GetSet(value As Single)IncreasingUnitTime = valueEnd SetEnd PropertyPrivate AtleastOnlineTime As Single"最少在线时间Public Property AtleastOnlineTime_ As SingleGetReturn AtleastOnlineTimeEnd GetSet(value As Single)AtleastOnlineTime = valueEnd SetEnd Property Private ReadyTime As Single "准备时间Public Property ReadyTime_ As SingleGetReturn ReadyTimeEnd GetSet(value As Single)ReadyTime = valueEnd SetEnd Property Private AtleastMoney As Single"最少金额Public Property AtleastMoney_ As SingleGetReturn AtleastMoneyEnd GetSet(value As Single)AtleastMoney = valueEnd SetEnd Property End Class
有什么用呢?当你需要注册一个用户时候,你得从表示层(UI)把数据传递给用于访问数据库的数据访问层(DAL),但是,你不可能把用户注册的信息:学号,姓名,卡号,注册日期,注册时间,班级。。。。。。等等把参数传递给函数,进行增加行操作吧?
’你该不会真的这么传值吧?被吓到了AddUser(StudentID,StudentName,CardID,RegisterDate,RegisterTime,Class。。。。。。)’而如果你把这些数据封装成一个类,如上述,你只需要传递一个类就行了AddUser(UserInfo)