对应类的实例化,程序员再熟悉不过了,我虽然刚进入IT行业不久,也见得不陌生,但有些问题确总不能理解清楚。
比如有两个类,一个为静态类(简称A),另一个(简称B)的实例对应着数据库的记录。当A中有一个方法为GetB(Bid)即通过B实例的ID实例化B,
Bid对应的是数据库中的记录。这种情况,B实例的实例化便有几种方式了:
第一种方式:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
第二种方式:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
第三种方式:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
第四种方式:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
第五种方式:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
我们现在正在开发的薪酬辅助核算系统,经过讨论采用了第4中方式对类进行实例化,但由于系统中类关系的复杂性,造成了造成了A类中GetB方法设计比较复杂,所以我有点怀疑第四种方式初始化类是否有效、可行,个人比较偏向第五种。
下面是我们系统相关的几个类图:
其中,我们为每个类定义了数据层的数据操作类(业务层类名后加DAL),BusinessConsignController便是上文说到的A类,PayList便是B类,GetB()对应的是GetPayList。
我使用第四种方式实现的代码如下:
1
/// <summary>
2
/// 通过PayListID获取对应的PayList
3
/// </summary>
4
/// <param name="plid">要获取的PayList的id号</param>
5
public static PayList GetPayList(int plid)
6
{
7
Database db = DatabaseFactory.CreateDatabase("SqlServerExternal");
8
string sqlCommand = "GetPayList";
9
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
10
db.AddInParameter(dbCommand, "PayListId", DbType.Int32, plid);
11
12
DataSet dataSet = db.ExecuteDataSet(dbCommand); //通过存储过程获取的三个DataTable
13
DataTable plDataTable = dataSet.Tables[0]; //包含了对应PayList的信息,只有一条记录
14
DataTable pepiDataTable = dataSet.Tables[1]; //包含了对应PayList的所有PayEntry和PayItem信息,PayEntry重复
15
DataTable plcDataTable = dataSet.Tables[2]; //包含了对应PayList的合并信息
16![](/Images/OutliningIndicators/InBlock.gif)
17
if (plDataTable.Rows.Count != 1)
18
return null;
19
PayList pl = new PayList(); //初始化PayList
20
pl.plname = plDataTable.Rows[0]["name"].ToString(); //为PayList的每个属性进行赋值
21
pl.createDateTime = (DateTime)plDataTable.Rows[0]["CreateDateTime"];
22
pl.payDateTime = (DateTime)plDataTable.Rows[0]["PayDateTime"];
23
pl.owner = OrganizationController.GetPerson((int)plDataTable.Rows[0]["ownerId"]);
24
pl.payTemplate = PayTypeController.GetPayTemplate((int)plDataTable.Rows[0]["PayTemplateId"]);
25
pl.state = (PayListState)plDataTable.Rows[0]["state"];
26
27
PayEntry pe;
28![](/Images/OutliningIndicators/InBlock.gif)
29
PayItem pi;
30![](/Images/OutliningIndicators/InBlock.gif)
31
int rowNum = 0;
32
while (rowNum < pepiDataTable.Rows.Count) //此循环为了构造PayList的payEntries属性
33
{
34
pe = new PayEntry(); //初始化PayEntry
35
pe.personal = OrganizationController.GetPerson((int)pepiDataTable.Rows[rowNum]["PersonalId"]);//为PayEntry的每个属性进行赋值
36
pe.peid = (int)pepiDataTable.Rows[rowNum]["PayEntry.ID"];
37
do //此循环为了构造PayEntry的payItems属性
38
{
39
pi = new PayItem(); //初始化PayItem
40
pi.financedept = (Department)pepiDataTable.Rows[rowNum]["FinanceDeptId"]; //为PayItem的所有属性赋值
41
pi.piid = (int)pepiDataTable.Rows[rowNum]["id"];
42
pi.money = (decimal)pepiDataTable.Rows[rowNum]["money"];
43
pi.project = (Project)pepiDataTable.Rows[rowNum]["projectId"];
44
pi.payItemTemplate = payTemplate.PayItemTemplates[(int)pepiDataTable.Rows[rowNum]["PayItemTemplateId"]];
45
pi.RemarkInfo = pepiDataTable.Rows[rowNum]["RemarkInfo"].ToString();
46
pi.ResponseInfo = (decimal)pepiDataTable.Rows[rowNum]["ResponseInfo"];
47![](/Images/OutliningIndicators/InBlock.gif)
48
pi.payItems.Add(pi.Id,pi); //将新的PayItem赋予PayEntry属性payItems
49
rowNum ++;
50
}
51
while (rowNum < pepiDataTable.Rows.Count && peid == (int)pepiDataTable.Rows[rowNum]["PayEntry.ID"]);
52
pl.payEntries.Add(pe.Id, pe); //将新的PayEntry赋予PayList属性payEntrys
53
}
54![](/Images/OutliningIndicators/InBlock.gif)
55
PayListCombine payListCombine;
56![](/Images/OutliningIndicators/InBlock.gif)
57
for (rowNum = 0; rowNum < plcDataTable.Rows.Count; rowNum++) //此循环为了构造PayList的payListCombines属性
58
{
59
plc = new PayListCombine();
60
plc.sourcePayListId = (int)plcDataTable.Rows[rowNum]["SourcePayListId"];
61
plc.sourcePayItemTemplateId = (int)plcDataTable.Rows[rowNum]["SourcePayItemTemplateId"];
62
plc.targetPayListId = (int)plcDataTable.Rows[rowNum]["TargetPayListId"];
63
plc.targetPayItemTemplateId = (int)plcDataTable.Rows[rowNum]["TargetPayItemTemplateId"];
64
plc.Id = (int)plcDataTable.Rows[rowNum]["Id"];
65
pl.payListCombines.Add(plc.Id, plc); //将新的payListCombine赋予PayList属性payListCombines
66
}
67
return pl;
68
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)