此系列只代表我在学习Apress.Expert.C#.2008.Business.Objects过程中总结出来的应用方法,只代表个人意见,把自己学习过程中总结的经验与大家分享。
CSLA.NET国内学的人好像也很多,但是这方面的学习资料太少,总结经验的人也不多,只有 Apress.Expert.C#.2008.Business.Object这本书,还是英文的,原来有本C#.2005.Business.Object的中文版。但现在CSLA.NET已经3.6了,与2005的有很大的变化。我的英文也不好,读了2遍2008版本的,也不是很理解,然后看了作者操作的一些例子,结合自己的开发经验总结了这些东西。
在使用CSLA.NET框架开发web应用时主要使用下边四个类
1)Editable root:可编辑的根对象
2)Read-only root:只读的根对象实体
3)Read-only root collection:只读的根对象集合
4)Command object:命令对象
1)Editable root:可编辑的根对象
CSLA.NET中还有Editable child,我没看出来他有多大用处和Editable root功能差不多,我把一切对象都看成是Editable root,各种Editable root可以自由组合使用其它的Editable root。所以就不存在明显的Editable child。一般我也不会使用子对象来完成数据的更新。主要是考虑效率的问题,我可能会使用存储过程来成批处理,而不是采用子对象的方式一个个的调用。
Editable root主要用来对单个业务对象进行增加、删除、修改、查询的操作。同时还包括对象权限的控制,业务实体内业务规则的定义。我特别要强调一个,只能对单个业务对象操作,如只能增加一个、删除一个、修改一个业务对象,查询返回一个业务对象。有点像数据库中的数据操作SQL。此对象只包括这些方法,功能清楚、单一。
2)Read-only root:只读的根对象实体
只提供对实体属性的get访问,内部可以修改,对外不能修改属性,主要用作Read-only root collection集合对象的数据项。
3)Read-only root collection:只读的根对象集合
对业务对象的集合操作,主要是根据不同条件来查询对象,不提供集合的整体增加、删除、修改。是个只读的业务对象。包含的实体为Read-only root。一个强类型的业务实体集。所有操作都会返回Read-only root对象的集合。业务对象的所有查询业务都放到此类中。
对于一些复杂的查询考虑建议增加一个新类,所有方法可以返回DataSet。为什么会有这个类呢,因为我不想把业务中所有的对象都定义成一个类,我不是面向对象的狂热者。我一般采用的规则为对系统中固定的业务对象都定义一个完整的业务类严格按CSLA的方式来处理业务对象,对一些相对不固定的(查询,统一,报表)等,就不建立业务类,还是采用我们的原来的方式,返回DataSet集合。不然系统中的类,太庞大。特别是中国人使用的系统,变化多端。我觉得不可能把所有东西都强类型化,太复杂。
4)Command object:命令对象
我主要用来执行一些增加、删除、修改的操作。主要是集合操作,如成批更新,删除业务对象等,执行后台的一个存储过程。说白了就是执行一条命令,命令的形式可以任意,这个命令在Editable root和Read-only root collection类中都没有的命令。这个类的存在主要是丰富Editable root类的业务操作。
CodeSmith代码生成工具可以根据数据库表为我们自动生成以上各业务类的标准代码。目前已经有支持CSLA.NET3.6的版本。