一个不算很复杂的BLL层的方法的代码如下。
我们需要考虑的如下几种情形(以下统计并不完全):
1、对某些不能重复的字段进行判断,以检查其是否重复。
2、如果某条记录被其它表引用,则会抛出异常。
3、如果每次操作多条记录,或者多个表,则需要使用事务。
4、删除记录时,可能需要将详细记录表的相关记录一并删除。
5、添加记录时,可能需要将详细记录表的相关记录一并添加。
6、没有专用于更新某个字段的方法,所以需要先读取整个记录,再更改相应字段,再更新整条记录。
7、一些情况下,某些方法需要返回一些特别的值。
8、一些情况下,某些方法缺失。如某些情况下,只有Insert方法,没有Update方法。
除此之外,由于业务的特殊性,还可能有众多的其它情形需要考虑。因此,在必要的情况下,我们有必要做一些配置,以便于代码的自动生成。当然,先自动生成部分代码,再手工完成其它代码也是一个不错的想法,只是需要注意,防止以后自动生成时覆盖掉以前的手工代码(使用TFS进行代码管理,能有效避免这个失误)。
由于笔者命名等的规范性,很多规则可以避免需要配置即可生成代码。这里,笔者仅仅配置了需要检查重复的字段。
具体的自动生成代码的过程,这里就不列出来了,也不值得列出来,使用了非常多的条件判断,由此这个过程的复杂性可见一斑。请读者自行查看代码。
BLLToService、ServiceToHost等代码生成器就显得非常简单,笔者就不一一介绍了。
我们需要考虑的如下几种情形(以下统计并不完全):
1、对某些不能重复的字段进行判断,以检查其是否重复。
2、如果某条记录被其它表引用,则会抛出异常。
3、如果每次操作多条记录,或者多个表,则需要使用事务。
4、删除记录时,可能需要将详细记录表的相关记录一并删除。
5、添加记录时,可能需要将详细记录表的相关记录一并添加。
6、没有专用于更新某个字段的方法,所以需要先读取整个记录,再更改相应字段,再更新整条记录。
7、一些情况下,某些方法需要返回一些特别的值。
8、一些情况下,某些方法缺失。如某些情况下,只有Insert方法,没有Update方法。
除此之外,由于业务的特殊性,还可能有众多的其它情形需要考虑。因此,在必要的情况下,我们有必要做一些配置,以便于代码的自动生成。当然,先自动生成部分代码,再手工完成其它代码也是一个不错的想法,只是需要注意,防止以后自动生成时覆盖掉以前的手工代码(使用TFS进行代码管理,能有效避免这个失误)。
1
public
void SaveFunction(
FunctionInfo functionInfo)
2 {
3
Database database =
Factory.CreateDatabase();
4
FunctionDAL dal =
new
FunctionDAL(database);
5
6
try
7 {
8
string faultType =
"Record duplicated exception.";
9
string faultReasonForFunctionName =
"Function Name is duplicated.";
10
11
IList listByFunctionName = dal.GetFunctionsByFunctionName(functionInfo.FunctionName);
12
13
if (dal.GetFunctionByFunctionId(functionInfo.FunctionId) ==
null)
14 {
15
if (listByFunctionName !=
null)
16 {
17
throw
new
FaultException<
FaultInfo>(
new
FaultInfo(faultType, faultReasonForFunctionName),
new
FaultReason(faultReasonForFunctionName));
18 }
19
20 functionInfo.FunctionId = (
new
TableDAL(database)).GetTableValueByTableId(
TableIdEnum.Function);
21
22 dal.InsertFunction(functionInfo);
23 }
24
else
25 {
26
if ((listByFunctionName ==
null || (listByFunctionName.Count == 1 && ((
FunctionInfo)listByFunctionName[0]).FunctionId == functionInfo.FunctionId)) ==
false)
27 {
28
throw
new
FaultException<
FaultInfo>(
new
FaultInfo(faultType, faultReasonForFunctionName),
new
FaultReason(faultReasonForFunctionName));
29 }
30
31 dal.UpdateFunctionByFunctionId(functionInfo);
32 }
33 }
34
catch
35 {
36
throw;
37 }
38
finally
39 {
40 database.Connection.Close();
41 }
42 }
1
<?
xml
version
="
1.0"
encoding
="
utf-8"
?>
2
<
root
>
3
<
table
name
="
Department"
referenced
="
Department is referenced."
>
4
<
item
name
="
DepartmentName"
duplicated
="
Department Name is duplicated."
/>
5
</
table
>
6
</
root
>
BLLToService、ServiceToHost等代码生成器就显得非常简单,笔者就不一一介绍了。
转载于:https://blog.51cto.com/eallies/79007