基本上界面设计好了, 下一步就要设计BLL层,看这一层是怎样控制数据的,应该怎样用控制层进行控制,完成系统呢?
我们首先来分析一下BLL层是怎样进行控制逻辑的,只有知道其工作原理了才能较为合理的抽象BLL层的类来。
我实现了一个三层架构实例,从各层中包含的类、各类拥有的方法以及相互调用的顺序上让我从实现的角度重新认识了一下三层架构。
之前我对三层架构的认识只是停留在理论上,从概念上知道界面层是用来放置窗体类,用来接收用户给予的消息,并将这些消息传递给BLL层进行“处理”。而对于到底如何呼叫,怎样接收,这些都是问题。通过一个实例,我了解到界面层只需要将一个参数传给BLL的一个类的方法(告诉BLL层用户要干什么)。
被调用的这个方法是工作实现的主宰,虽然它没有写出具体是怎样实现的。但是它控制了工作实现的步骤。通过它的调用,一步步的完成工作。
这也正体现了控制层的功能,通过对界面传来的信息的分析,搞清楚该做什么工作,定好调用的顺序,通过不同的组合来实现不同的功能。
这样看来,控制层需要结合用例来建立,不同的用例就是不同的功能,不同的功能就需要不同的实现步骤。
有了BLL层程序向用户展示的东西就非常少了,对程序的安全性是很有好处的。
至于数据处理层就是实际完成工作的地方了,它的工作都是小块的实际操作,通过控制层的不同调用(组合)就可以实现不同的功能。那我们怎样才能定下来数据处理层的类呢?
我们对数据的处理大多都是针对数据表的,所以数据处理层的类大多是面向数据库表的,不同的数据表操作就是与数据表想对应的类的方法。
如有不对数据操作的工作我们可以再控制层直接解决,也可以例外建立一个包来进行处理,也可以将其放在数据处理层中。
不过我还是觉得将将此类操作另外封装在一个包中。我是这样考虑的,将这些对数据处理的类进行分类,在今后的维护中可能会体现出一些优势(只是猜测)。从仿生学的角度来看,人体就是这样对数据进行处理的,非条件反射直接在脊髓就处理了(不对数据库进行操作);条件反射需要到大脑才可以解决(对数据库进行处理)。可能这样的比喻不太恰当。
下面我们在对控制层和数据处理层的类进行抽象。
首先从学生的需求出发: bStuInfo, bStuEnroll, bStuRecharge, bSthCancellation, bStuModinfo, bStuOn, bStuDown, bSI_Enrolli ,bSI_Studenti, bSI_Rechargei, bSI_Onlinei, bSI_Candellationi, bSI_SOSituation, bSI_Balance,
教师需求:bTA_AddUser, bTA_DelUser, bT_SettleAccounts, bT_ChangePwd, bTI_Tworki , bTI_Rota, bTI_CompelDown,
会计需求:bA_DaySA, bA_MouthSA, bA_YearSA, bAI_Aworki,
管理员需求:b_SetRota,b_SetBasalData, bI_Report,
已经将BLL层的类写好了,接下来就是数据处理层了,我将数据处理层分成了两个包,一个是“DAL”, 另一个是“operation”。
DAL中的类于数据表是相对应的,共11个:AccountsSAinfo,CandelationInfo,Rota,EnrollInfo,BasalData,OnlineInfo,RechargeInfo,StudentInfo,UserInfo,TeaSAinfo,WorkInfo
而Operation中类包括:OpExpend,OpAccounts
这些类的方法和属性正在完善中…… ……