重要补充
在RIA服务编程中,遵守既定的域操作方法约定显得非常重要,其重要意义在于:
可以使开发人员投入较少的工作量。
提供一致性的、富于美感的编程体验。
实现通用型域驱动语言,而且提高了代码在团队开发中的可读性。
(一)适用于所有域操作的规则
归纳来看,适用于所有域操作的规则包括:
域操作必须带有public修改符。
如果第一个(或前面连续的几个)参数类型为实体类型的话,仅允许存在一个域操作方法。当查询方法返回一个IEnumberable或IQeryable类型时,只要应用到RiaServices相关操作,此类型将代表了一个实体。因此,要使其他域操作有效,必须确保存在一个查询类型的域操作方法。这种情况下存在的一个允许的例外是,不使用实体类型作为参数的域操作方法将是有效的域操作方法。
域操作方法必须使用可串行化的类型作为参数及返回类型。
(二)典型域操作方法编程约定
1. 插入操作
返回void类型,并且仅有一个实体参数类型。
命名格式:前缀是Insert,Add,Create之一,后面跟着实体名。
例如:
在使用InsertAttribute属性的情况下,可以使用任何命名形式,例如:
[Insert]
public void YourFavoriteMethodName(Employee newEmployee) {...}
2. 更新操作
返回void类型,并且仅有一个实体参数类型。
命名格式:前缀是Update,Change,Modify之一,后面跟着实体名。
例如:
在使用UpdateAttribute属性的情况下,可以使用任何命名形式,例如:
[Update]
public void YourFavoriteMethodName(Employee changedEmployee)
3. 删除操作
返回void类型,并且仅有一个实体参数类型。
命名格式:前缀是Delete,Remove之一,后面跟着实体名。例如:
在使用DeleteAttribute属性的情况下,可以使用任何命名形式,例如:
[Delete]
public void YourFavoriteMethodName(Employee currentEmployee)
4. 查询操作
可以是返回IEnumerable<T>,IQueryable<T>或T类型的任何方法。这里T是实体类型。例如:
public IQueryable<Employee> GetEmployee() {...}
//也可以返回一个实体类型而不是IQueryable/IEnumerable类型
public City GetCity() {...}
此外,我们还可以使用QueryAttribute属性显式地指定一个方法为查询操作,例如:
[Query]
public IQueryable<Employee> GetEmployee() {...}
5. 关于自定义操作
返回void类型,使用实体类型作为方法的第一个参数,并且方法命名没有遵循前面几种CRUD操作对应的约定,这样的方便将被识别为自定义方法,例如:
此外,我们还可以使用CustomAttribute:属性显式地指定一个方法为自定义操作,例如:
[Custom]
public void ApproveEmployee(Employee changedEmployee, ...)