
这样是比较容易扩展和修改的结构,数据的展现和数据的持久化相互不会影响,并把业务逻辑封装在一起。
模型代码为:
1
using System;
2
3
namespace Example
4
{
5
/**//// <summary>
6
/// 示例
7
/// </summary>
8
class Example
9
{
10
/**//// <summary>
11
/// 应用程序的主入口点。
12
/// </summary>
13
[STAThread]
14
static void Main(string[] args)
15
{
16
PageView view = new PageView() ;
17
view.Show() ;
18
}
19
#region 20050712
20
/// <summary>
21
/// 对象
22
/// </summary>
23
public class Person
24
{
25
private string name = String.Empty ;
26
private string telephone = String.Empty ;
27
28
public Person() {}
29
30
public string Name
31
{
32
set{ name = value ; }
33
get{ return name ; }
34
}
35
public string Telephone
36
{
37
set{ telephone = value ; }
38
get{ return telephone ; }
39
}
40
}
41
/// <summary>
42
/// 界面展现层
43
/// </summary>
44
public class PageView
45
{
46
public PageView() {}
47
48
public void Show()
49
{
50
string name = BusinessRule.GetPersonName() ;
51
string telephone = BusinessRule.GetPersonTelephone() ;
52
Console.WriteLine( string.Format( "{0}的电话是{1}." , name ,telephone ) ) ;
53
}
54
}
55
/// <summary>
56
/// 业务逻辑层
57
/// </summary>
58
public class BusinessRule
59
{
60
public BusinessRule() {}
61
62
public static string GetPersonName()
63
{
64
//业务逻辑代码
65
return ( new Data() ).GetPerson().Name ;
66
}
67
public static string GetPersonTelephone()
68
{
69
//业务逻辑代码
70
return ( new Data() ).GetPerson().Telephone ;
71
}
72
}
73
/// <summary>
74
/// 数据持久化层
75
/// </summary>
76
public class Data
77
{
78
public Data() {}
79
80
public Person GetPerson()
81
{
82
Person person = new Person() ;
83
person.Name = "冯超" ;
84
person.Telephone = "88888888" ;
85
return person ;
86
}
87
}
88
#endregion
89
}
90
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

由于开始数据库的设计不是很合理,把A模块的信息都集中存放在一个表中,用一个对象来表示,结果到现在变得不易与其他模块共用数据,所以就把这个表拆成几个小表,形成多个小对象,并关联起来。
由于我思维定势,在修改了数据持久层后又去修改业务逻辑层。把原本好的设计的优势浪费了 。
改动为(不好的修改):
1
using System;
2
3
namespace Example
4
{
5
/**//// <summary>
6
/// 示例
7
/// </summary>
8
class Example
9
{
10
/**//// <summary>
11
/// 应用程序的主入口点。
12
/// </summary>
13
[STAThread]
14
static void Main(string[] args)
15
{
16
PageView view = new PageView() ;
17
view.Show() ;
18
}
19
#region 20050712
20
21
/// <summary>
22
/// 原person对象拆分为2个对象BasicPerson 和 Link
23
/// 去掉原对象person
24
/// </summary>
25
public class BasicPerson
26
{
27
private string name = String.Empty ;
28
29
public BasicPerson() {}
30
31
public string Name
32
{
33
set{ name = value ; }
34
get{ return name ; }
35
}
36
}
37
public class Link
38
{
39
private string telephone = String.Empty ;
40
41
public Link() {}
42
43
public string Telephone
44
{
45
set{ telephone = value ; }
46
get{ return telephone ; }
47
}
48
}
49
50
/// <summary>
51
/// 界面展现层
52
/// </summary>
53
public class PageView
54
{
55
public PageView() {}
56
57
public void Show()
58
{
59
string name = BusinessRule.GetPersonName() ;
60
string telephone = BusinessRule.GetPersonTelephone() ;
61
Console.WriteLine( string.Format( "{0}的电话是{1}." , name ,telephone ) ) ;
62
}
63
}
64
/// <summary>
65
/// 业务逻辑层
66
/// </summary>
67
public class BusinessRule
68
{
69
public BusinessRule() {}
70
71
public static string GetPersonName()
72
{
73
//业务逻辑代码
74
return ( new Data() ).GetBasicPerson().Name ;
75
}
76
public static string GetPersonTelephone()
77
{
78
//业务逻辑代码
79
return ( new Data() ).GetLink().Telephone ;
80
}
81
}
82
83
/// <summary>
84
/// 数据持久化层
85
/// </summary>
86
public class Data
87
{
88
public Data() {}
89
90
public BasicPerson GetBasicPerson()
91
{
92
BasicPerson basic = new BasicPerson() ;
93
basic.Name = "冯超" ;
94
return basic ;
95
}
96
public Link GetLink()
97
{
98
Link link = new Link() ;
99
link.Telephone = "88888888" ;
100
return link ;
101
}
102
}
103
#endregion
104
}
105
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

本来这样的改动是不用修改界面展现层和业务逻辑层的,只要在业务逻辑层和数据持久化层插入一个数据对象转换层就能很好的解决问题。
比较好的解决方法是:

模型代码为(好的修改):
1
using System;
2
3
namespace Example
4
{
5
/**//// <summary>
6
/// 示例
7
/// </summary>
8
class Example
9
{
10
/**//// <summary>
11
/// 应用程序的主入口点。
12
/// </summary>
13
[STAThread]
14
static void Main(string[] args)
15
{
16
PageView view = new PageView() ;
17
view.Show() ;
18
}
19
#region 20050712
20
/// <summary>
21
/// 原对象person
22
/// </summary>
23
public class Person
24
{
25
private string name = String.Empty ;
26
private string telephone = String.Empty ;
27
28
public Person() {}
29
30
public string Name
31
{
32
set{ name = value ; }
33
get{ return name ; }
34
}
35
public string Telephone
36
{
37
set{ telephone = value ; }
38
get{ return telephone ; }
39
}
40
}
41
/// <summary>
42
/// 原person对象拆分为2个对象BasicPerson 和 Link
43
/// </summary>
44
public class BasicPerson
45
{
46
private string name = String.Empty ;
47
48
public BasicPerson() {}
49
50
public string Name
51
{
52
set{ name = value ; }
53
get{ return name ; }
54
}
55
}
56
public class Link
57
{
58
private string telephone = String.Empty ;
59
60
public Link() {}
61
62
public string Telephone
63
{
64
set{ telephone = value ; }
65
get{ return telephone ; }
66
}
67
}
68
69
/// <summary>
70
/// 界面展现层
71
/// </summary>
72
public class PageView
73
{
74
public PageView() {}
75
76
public void Show()
77
{
78
string name = BusinessRule.GetPersonName() ;
79
string telephone = BusinessRule.GetPersonTelephone() ;
80
Console.WriteLine( string.Format( "{0}的电话是{1}." , name ,telephone ) ) ;
81
}
82
}
83
/// <summary>
84
/// 业务逻辑层
85
/// </summary>
86
public class BusinessRule
87
{
88
public BusinessRule() {}
89
90
public static string GetPersonName()
91
{
92
//业务逻辑代码
93
return ( new Data() ).GetPerson().Name ;
94
}
95
public static string GetPersonTelephone()
96
{
97
//业务逻辑代码
98
return ( new Data() ).GetPerson().Telephone ;
99
}
100
}
101
/// <summary>
102
/// 数据对象转换层
103
/// </summary>
104
public class Combination
105
{
106
public Combination() {}
107
108
public static Person GetPerson( BasicPerson basic , Link link )
109
{
110
Person person = new Person() ;
111
person.Name = basic.Name ;
112
person.Telephone = link.Telephone ;
113
return person ;
114
}
115
}
116
/// <summary>
117
/// 数据持久化层
118
/// </summary>
119
public class Data
120
{
121
public Data() {}
122
123
public Person GetPerson()
124
{
125
Person person = new Person() ;
126
BasicPerson basic = new BasicPerson() ;
127
Link link = new Link() ;
128
129
basic.Name = "冯超" ;
130
link.Telephone = "88888888" ;
131
//组合被拆分的小对象
132
person = Combination.GetPerson( basic , link ) ;
133
return person ;
134
}
135
}
136
#endregion
137
}
138
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

即是说,好的修改应该是内聚的。