民意调查模块的BLL层
接着数据访问层的再次重构,我们实现对应的BLL层编码,其实关于这部分的内容,可以参考BLL层编码实现,这里仅仅简单通过代码而演示。构建民意调查模块的业务域对象(Poll和PollOption)。
上图的代码实际上只需从简单实体类PollDetail和PollOptionDetail类中复制过来,改一下类名称即可。从这里可以看到至少业务域对象已经涵盖了简单实体对象的所有。但是还需要增加简单实体对象没有的方法和关联父子对象引用的属性。我们接着继续完善业务域对象。
值得一提的是:就上图而言,我们发现属性Id/AddedBy/AddedDate是共有的,Id是主键,Addedby(记录添加者),AddedDate(添加日期)
一般而言,如果需要实现跟踪和审计功能,这些字段是必不可少的,更复杂的甚至于还记录了修改人/修改日期等等字段,而且每个表都需要增加这些字段。
虽然Votes属性也共有(但不具有通用意义,别的表是不保证会有的)。模块复杂的,表也较多,所以这样通用意义的属性我们最好还是提取到父类中,这样子类继承显得更简洁和容易维护,我们这里还是养成这样良好的习惯。
接下来我们完善业务域对象的方法,先实现静态方法,其实就是对DAL层PollsProvider方法的调用而已。
不过这里有细节需要注意:上图中的Get方法返回的对象是简单实体对象,BLL层返回给UI的自然是业务域对象,所以在BLL层封装调用这些方法的时候,
必然涉及实体对象<集合>转换为业务域对象<集合>的实现。
现在先实现这些转换方法:
接着封装PollsProvider对应的方法:(Poll.cs增加的方法如下)
PollOption.cs增加的如下:
到这里,域对象的特有属性可以开始实现了。我们知道Polls表和PollOptions表相关关联。Polls问卷的选项要在PollOptions中获得,而
选项管理的问卷需在Polls表获取。
自然,Poll域对象需要增加一个属性以获取与之关联的所有选项。PollOption域对象需要Poll属性获得关联的问卷信息。
我们看实现的代码:
到这一步,其实一个很关键的功能一直忽略了,就是如何保证数据访问的性能?前面在打造DAL时DataAccess还增加了缓存的相关设置,其实BLL层更是真正实现数据缓存的地方,意味着我们需要进一步在现有的基础上增加缓存的能力,关于这一方面的讲解将放在下一篇博客中讲解,由于要过年了,会休息几天,望大家见谅!
再次预祝兄弟姐妹们龙龙大吉!阖家欢乐!国泰民安!!!
当来之世,经道灭尽,我以慈悲哀愍,特留此经止住百岁。其有众生,值斯经者,随意所愿,皆可得度。(南无阿弥陀佛)
道可道,非常道;名可名,非常名。
我常说,一个国家,一个民族,亡国都不怕,最可怕的是一个国 家和民族自己的根本文化亡掉了,这就会沦为万劫不复,永远不会翻身。---南怀瑾<国学大师>