天天看点

.NET多层架构告别大学青春

.NET多层架构告别大学青春

   接着上次的教程继续说,还在学校的时候真的见识太少,对于现在公司的要求都是可望不可即,也就见怪不怪应届生的竞争力是多么不值得一提了,所以提前给自己找个好公司,去帮公司解决问题,才是学习和进步的正确方向,学校的生活只是一个儿时的梦想实现的倒影,不要过于迷恋了。

.NET多层架构告别大学青春

   这里由于版权之类的问题,我就不截图了,直接给大家看看做的代码截图,如图,

<a href="http://blog.51cto.com/attachment/201308/155914534.jpg" target="_blank"></a>

  可以看到这才是社会需要的标准,我们还是太年轻了,因为这些东西还只是最基本的,不过给大家展示的这个企业后台客户关系管理系统的权限业务逻辑算是郑州的最高水准了,不信的可以慢慢看下面的演示,耐心。。

.NET多层架构告别大学青春
.NET多层架构告别大学青春

<a href="http://blog.51cto.com/attachment/201308/160818317.jpg" target="_blank"></a>

  这样就熟悉了权限管理的业务逻辑实现方法,接下来就是对于使用什么样的架构来写这么庞大的一个系统,选择三层显然已经满足不了,所以就开始学习了传说中的多层架构 - 工厂模式来开发这个后台。一般的小公司会选择用动软来构架好一些基本的类库和方法,这样来一步步的修改功能,不过大公司的会考虑效率问题,最后我所在的公司介绍了一种代码生成器SocanCode,用这个的好处是可以定制属于自己的代码类库,非常巧妙的使用JS编写了一套替换代码的生成方法,大家可以试SocanCode,如图,PS:右侧的模版就是修改定制自己想要的代码规范,这里就不详述了,因为网上的教程很多,下面来介绍生成后的类库使用方法。

<a href="http://blog.51cto.com/attachment/201308/162022348.jpg" target="_blank"></a>

这样生成了我们要写的业务,三层架构的模版文件,如图,

<a href="http://blog.51cto.com/attachment/201308/162508758.jpg" target="_blank"></a>

然后把各种页面的四操作写出来,对于大家来说应该不难吧,我在上期写过一个例子,这里就不多说了。写好后就添加类库到本项目中,如图,

<a href="http://blog.51cto.com/attachment/201308/164842157.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201308/164842182.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201308/164842302.jpg" target="_blank"></a>

.NET多层架构告别大学青春

TVisitBLL:

1

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

<code>using</code> <code>System;</code>

<code>using</code> <code>System.Collections.Generic;</code>

<code>using</code> <code>System.Text.RegularExpressions;</code>

<code>using</code> <code>System.Web;</code>

<code>using</code> <code>System.Web.Caching;</code>

<code>namespace</code> <code>BLL</code>

<code>{</code>

<code>    </code><code>/// &lt;summary&gt;</code>

<code>    </code><code>/// 业务逻辑类 TVisitBLL</code>

<code>    </code><code>/// &lt;/summary&gt;</code>

<code>    </code><code>public</code> <code>class</code> <code>TVisitBLL: BLHelper</code>

<code>    </code><code>{</code>

<code>        </code><code>private</code> <code>readonly</code> <code>DAL.TVisitDAL dal = </code><code>new</code> <code>DAL.TVisitDAL();</code>

<code>        </code><code>public</code> <code>TVisitBLL()</code>

<code>            </code><code>: </code><code>base</code><code>(</code><code>"_TVisit_"</code><code>) { }</code>

<code>        </code><code>/// &lt;summary&gt;</code>

<code>        </code><code>/// 增加一条数据</code>

<code>        </code><code>/// &lt;/summary&gt;</code>

<code>        </code><code>public</code> <code>void</code> <code>Add(Model.TVisitModel model)</code>

<code>        </code><code>{</code>

<code>            </code><code>dal.Add(model);</code>

<code>        </code><code>}</code>

<code>        </code><code>/// 更新一条数据</code>

<code>        </code><code>public</code> <code>void</code> <code>Update(Model.TVisitModel model)</code>

<code>            </code><code>int</code> <code>count = dal.Update(model);</code>

<code>            </code><code>if</code> <code>(EnableCache &amp;&amp; count &gt; 0)</code>

<code>            </code><code>{</code>

<code>                </code><code>RemoveModelCache(model.VisitId);</code>

<code>            </code><code>}</code>

<code>        </code><code>/// 删除一条数据</code>

<code>        </code><code>public</code> <code>void</code> <code>Delete(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>int</code> <code>count = dal.Delete(VisitId);</code>

<code>                </code><code>RemoveModelCache(VisitId.ToString());</code>

<code>        </code><code>/// 是否存在该记录</code>

<code>        </code><code>public</code> <code>bool</code> <code>Exists(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>bool</code> <code>bln = dal.Exists(VisitId);</code>

<code>            </code><code>return</code> <code>bln;</code>

<code>        </code><code>/// 得到一个对象实体</code>

<code>        </code><code>public</code> <code>Model.TVisitModel GetModel(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>Model.TVisitModel model = </code><code>null</code><code>;</code>

<code>            </code><code>if</code> <code>(!EnableCache)</code>

<code>                </code><code>model = dal.GetModel(VisitId);</code>

<code>            </code><code>else</code>

<code>                </code><code>string</code> <code>key = VisitId.ToString();</code>

<code>                </code><code>if</code> <code>(GetModelCache(key) != </code><code>null</code><code>)</code>

<code>                </code><code>{</code>

<code>                    </code><code>model = (Model.TVisitModel)GetModelCache(key);</code>

<code>                </code><code>}</code>

<code>                </code><code>else</code>

<code>                    </code><code>model = dal.GetModel(VisitId);</code>

<code>                    </code><code>TryAddModelCache(key, model, </code><code>null</code><code>, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, </code><code>null</code><code>);</code>

<code>            </code><code>return</code> <code>model;</code>

<code>        </code><code>/// 获得泛型数据列表</code>

<code>        </code><code>public</code> <code>List&lt;Model.TVisitModel&gt; GetList()</code>

<code>            </code><code>List&lt;Model.TVisitModel&gt; lst = dal.GetList();</code>

<code>            </code><code>return</code> <code>lst;</code>

<code>        </code><code>/// 分页获取泛型数据列表</code>

<code>        </code><code>public</code> <code>PageList&lt;Model.TVisitModel&gt; GetPageList(PageInfo pi)</code>

<code>            </code><code>PageList&lt;Model.TVisitModel&gt; pl = dal.GetPageList(pi);</code>

<code>            </code><code>return</code> <code>pl;</code>

<code>    </code><code>}</code>

<code>}</code>

TVisitDAL:

96

97

98

99

100

101

102

103

<code>using</code> <code>System.Data;</code>

<code>using</code> <code>System.Data.Common;</code>

<code>using</code> <code>System.Text;</code>

<code>namespace</code> <code>DAL</code>

<code>    </code><code>/// 数据访问类 TVisitDAL</code>

<code>    </code><code>public</code> <code>partial</code> <code>class</code> <code>TVisitDAL : DALHelper</code>

<code>        </code><code>public</code> <code>int</code> <code>Add(Model.TVisitModel model)</code>

<code>            </code><code>IDbDataParameter[] parms4TVisit = PrepareAddParameters(model);</code>

<code>            </code><code>return</code> <code>dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, COMMAND_ADD, parms4TVisit);</code>

<code>        </code><code>public</code> <code>int</code> <code>Update(Model.TVisitModel model)</code>

<code>            </code><code>IDbDataParameter[] parms4TVisit = PrepareUpdateParameters(model);</code>

<code>            </code><code>return</code> <code>dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, COMMAND_UPDATE, parms4TVisit);</code>

<code>        </code><code>public</code> <code>int</code> <code>Delete(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>IDbDataParameter[] parms4TVisit = PrepareDeleteParameters(VisitId);</code>

<code>            </code><code>return</code> <code>dbHelper.ExecuteNonQuery(CommandType.StoredProcedure, COMMAND_DELETE, parms4TVisit);</code>

<code>            </code><code>IDbDataParameter[] parms4TVisit = PrepareGetModelParameters(VisitId);</code>

<code>            </code><code>using</code> <code>(IDataReader dr = dbHelper.ExecuteReader(CommandType.StoredProcedure, COMMAND_GETMODEL, parms4TVisit))</code>

<code>                </code><code>if</code> <code>(dr.Read()) </code><code>return</code> <code>GetModel(dr);</code>

<code>                </code><code>return</code> <code>null</code><code>;</code>

<code>            </code><code>IDbDataParameter[] parms4TVisit = PrepareExistParameters(VisitId);</code>

<code>            </code><code>object</code> <code>obj = dbHelper.ExecuteScalar(CommandType.StoredProcedure, COMMAND_EXISTS, parms4TVisit);</code>

<code>            </code><code>return</code> <code>int</code><code>.Parse(obj.ToString()) &gt; 0;</code>

<code>        </code><code>/// 获取数量</code>

<code>        </code><code>public</code> <code>int</code> <code>GetCount()</code>

<code>            </code><code>object</code> <code>obj = dbHelper.ExecuteScalar(CommandType.StoredProcedure, COMMAND_GETCOUNT, </code><code>null</code><code>);</code>

<code>            </code><code>return</code> <code>int</code><code>.Parse(obj.ToString());</code>

<code>        </code><code>/// 获取泛型数据列表</code>

<code>            </code><code>using</code> <code>(IDataReader dr = dbHelper.ExecuteReader(CommandType.StoredProcedure, COMMAND_GETLIST, </code><code>null</code><code>))</code>

<code>                </code><code>List&lt;Model.TVisitModel&gt; lst = </code><code>new</code> <code>List&lt;Model.TVisitModel&gt;();</code>

<code>                </code><code>ExecuteReaderAction(dr, r =&gt; lst.Add(GetModel(r)));</code>

<code>                </code><code>return</code> <code>lst;</code>

<code>            </code><code>pi.RecordCount = GetCount();</code>

<code>            </code><code>pi.Compute();</code>

<code>            </code><code>PageList&lt;Model.TVisitModel&gt; pl = </code><code>new</code> <code>PageList&lt;Model.TVisitModel&gt;(pi);</code>

<code>            </code><code>using</code> <code>(IDataReader dr = dbHelper.ExecuteReader(CommandType.Text, COMMAND_GETLIST, </code><code>null</code><code>))</code>

<code>                </code><code>pl.List = </code><code>new</code> <code>List&lt;Model.TVisitModel&gt;();</code>

<code>                </code><code>ExecuteReaderAction(dr, pi.FirstIndex, pi.PageSize, r =&gt; pl.List.Add(GetModel(r)));</code>

<code>        </code><code>/// 由一行数据得到一个实体</code>

<code>        </code><code>private</code> <code>Model.TVisitModel GetModel(IDataReader dr)</code>

<code>            </code><code>Model.TVisitModel model = </code><code>new</code> <code>Model.TVisitModel();</code>

<code>            </code><code>PrepareModel(model, dr);</code>

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

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

<code>using</code> <code>DBUtility;</code>

<code>    </code><code>/// 数据访问类 TVisit ,此类请勿动,以方便表字段更改时重新生成覆盖</code>

<code>    </code><code>public</code> <code>partial</code> <code>class</code> <code>TVisitDAL</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_ADD = </code><code>"sp_TVisit_Add"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_UPDATE = </code><code>"sp_TVisit_Update"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_DELETE = </code><code>"sp_TVisit_Delete"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_EXISTS = </code><code>"sp_TVisit_Exists"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_GETMODEL = </code><code>"sp_TVisit_GetModel"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_GETCOUNT = </code><code>"sp_TVisit_GetCount"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>COMMAND_GETLIST = </code><code>"sp_TVisit_GetAllList"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITID = </code><code>"@in_VisitId"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITTIME = </code><code>"@in_VisitTime"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITCUSTOMER = </code><code>"@in_VisitCustomer"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITWAY = </code><code>"@in_VisitWay"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITCONTENT = </code><code>"@in_VisitContent"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_VISITOR = </code><code>"@in_Visitor"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FREMARK = </code><code>"@in_FRemark"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FSORT = </code><code>"@in_FSort"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FISDELETE = </code><code>"@in_FIsDelete"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FCREATOR = </code><code>"@in_FCreator"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FCREATEDATE = </code><code>"@in_FCreateDate"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FMODIFY = </code><code>"@in_FModify"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FMODIFYDATE = </code><code>"@in_FModifyDate"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FGUID = </code><code>"@in_FGUID"</code><code>;</code>

<code>        </code><code>internal</code> <code>const</code> <code>string</code> <code>PARM_FISSYNCHRONOUS = </code><code>"@in_FIsSynchronous"</code><code>;</code>

<code>        </code><code>/// 为新增一条数据准备参数</code>

<code>        </code><code>internal</code> <code>static</code> <code>IDbDataParameter[] PrepareAddParameters(Model.TVisitModel model)</code>

<code>            </code><code>IDbDataParameter[] parms = DbParameterCache.GetCachedParameterSet(dbHelper.ConnectionString, COMMAND_ADD);</code>

<code>            </code><code>if</code> <code>(parms == </code><code>null</code><code>)</code>

<code>                </code><code>parms = </code><code>new</code> <code>IDbDataParameter[]{</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITTIME, DbType.DateTime, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITCUSTOMER, DbType.Int32, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITWAY, DbType.Int32, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITCONTENT, DbType.AnsiString, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITOR, DbType.Int32, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FREMARK, DbType.String, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FSORT, DbType.Int32, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FISDELETE, DbType.Boolean, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FCREATOR, DbType.AnsiString, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FCREATEDATE, DbType.DateTime, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FMODIFY, DbType.AnsiString, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FMODIFYDATE, DbType.DateTime, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FGUID, DbType.AnsiString, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FISSYNCHRONOUS, DbType.Boolean, ParameterDirection.Input)};</code>

<code>                </code><code>DbParameterCache.CacheParameterSet(dbHelper.ConnectionString, COMMAND_ADD, parms);</code>

<code>            </code><code>parms[0].Value = model.VisitTime;</code>

<code>            </code><code>parms[1].Value = model.VisitCustomer;</code>

<code>            </code><code>parms[2].Value = model.VisitWay;</code>

<code>            </code><code>parms[3].Value = model.VisitContent;</code>

<code>            </code><code>parms[4].Value = model.Visitor;</code>

<code>            </code><code>parms[5].Value = model.FRemark;</code>

<code>            </code><code>parms[6].Value = model.FSort;</code>

<code>            </code><code>parms[7].Value = model.FIsDelete;</code>

<code>            </code><code>parms[8].Value = model.FCreator;</code>

<code>            </code><code>parms[9].Value = model.FCreateDate;</code>

<code>            </code><code>parms[10].Value = model.FModify;</code>

<code>            </code><code>parms[11].Value = model.FModifyDate;</code>

<code>            </code><code>parms[12].Value = model.FGUID;</code>

<code>            </code><code>parms[13].Value = model.FIsSynchronous;</code>

<code>            </code><code>return</code> <code>parms;</code>

<code>        </code><code>/// 为更新一条数据准备参数</code>

<code>        </code><code>internal</code> <code>static</code> <code>IDbDataParameter[] PrepareUpdateParameters(Model.TVisitModel model)</code>

<code>            </code><code>IDbDataParameter[] parms = DbParameterCache.GetCachedParameterSet(dbHelper.ConnectionString, COMMAND_UPDATE);</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_FISSYNCHRONOUS, DbType.Boolean, ParameterDirection.Input),</code>

<code>                    </code><code>dbHelper.CreateDbParameter(PARM_VISITID, DbType.Int32, ParameterDirection.Input)};</code>

<code>                </code><code>DbParameterCache.CacheParameterSet(dbHelper.ConnectionString, COMMAND_UPDATE, parms);</code>

<code>            </code><code>parms[14].Value = model.VisitId;</code>

<code>        </code><code>/// 为删除一条数据准备参数</code>

<code>        </code><code>internal</code> <code>static</code> <code>IDbDataParameter[] PrepareDeleteParameters(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>IDbDataParameter[] parms = DbParameterCache.GetCachedParameterSet(dbHelper.ConnectionString, COMMAND_DELETE);</code>

<code>                </code><code>DbParameterCache.CacheParameterSet(dbHelper.ConnectionString, COMMAND_EXISTS, parms);</code>

<code>            </code><code>parms[0].Value = VisitId;</code>

<code>        </code><code>/// 为查询是否存在一条数据准备参数</code>

<code>        </code><code>internal</code> <code>static</code> <code>IDbDataParameter[] PrepareExistParameters(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>IDbDataParameter[] parms = DbParameterCache.GetCachedParameterSet(dbHelper.ConnectionString, COMMAND_EXISTS);</code>

<code>        </code><code>/// 为获取一条数据准备参数</code>

<code>        </code><code>internal</code> <code>static</code> <code>IDbDataParameter[] PrepareGetModelParameters(</code><code>int</code><code>? VisitId)</code>

<code>            </code><code>IDbDataParameter[] parms = DbParameterCache.GetCachedParameterSet(dbHelper.ConnectionString, COMMAND_GETMODEL);</code>

<code>        </code><code>internal</code> <code>static</code> <code>void</code> <code>PrepareModel(Model.TVisitModel model, IDataReader dr)</code>

<code>            </code><code>model.VisitId = DbValue.GetInt(dr[</code><code>"VisitId"</code><code>]);</code>

<code>            </code><code>model.VisitTime = DbValue.GetDateTime(dr[</code><code>"VisitTime"</code><code>]);</code>

<code>            </code><code>model.VisitCustomer = DbValue.GetInt(dr[</code><code>"VisitCustomer"</code><code>]);</code>

<code>            </code><code>model.VisitWay = DbValue.GetInt(dr[</code><code>"VisitWay"</code><code>]);</code>

<code>            </code><code>model.VisitContent = DbValue.GetString(dr[</code><code>"VisitContent"</code><code>]);</code>

<code>            </code><code>model.Visitor = DbValue.GetInt(dr[</code><code>"Visitor"</code><code>]);</code>

<code>            </code><code>model.FRemark = DbValue.GetString(dr[</code><code>"FRemark"</code><code>]);</code>

<code>            </code><code>model.FSort = DbValue.GetInt(dr[</code><code>"FSort"</code><code>]);</code>

<code>            </code><code>model.FIsDelete = DbValue.GetBool(dr[</code><code>"FIsDelete"</code><code>]);</code>

<code>            </code><code>model.FCreator = DbValue.GetString(dr[</code><code>"FCreator"</code><code>]);</code>

<code>            </code><code>model.FCreateDate = DbValue.GetDateTime(dr[</code><code>"FCreateDate"</code><code>]);</code>

<code>            </code><code>model.FModify = DbValue.GetString(dr[</code><code>"FModify"</code><code>]);</code>

<code>            </code><code>model.FModifyDate = DbValue.GetDateTime(dr[</code><code>"FModifyDate"</code><code>]);</code>

<code>            </code><code>model.FGUID = DbValue.GetString(dr[</code><code>"FGUID"</code><code>]);</code>

<code>            </code><code>model.FIsSynchronous = DbValue.GetBool(dr[</code><code>"FIsSynchronous"</code><code>]);</code>

TVisitModel:

<code>namespace</code> <code>Model</code>

<code>    </code><code>/// 实体类 TVisitModel</code>

<code>    </code><code>public</code> <code>partial</code> <code>class</code> <code>TVisitModel</code>

<code>    </code><code>{ }</code>

<code>    </code><code>/// 实体类 TVisitModel, 此类请勿动,以方便表字段更改时重新生成覆盖</code>

<code>    </code><code>[Serializable]</code>

<code>    </code><code>public</code> <code>partial</code> <code>class</code> <code>TVisitModel : ICloneable</code>

<code>        </code><code>public</code> <code>TVisitModel()</code>

<code>        </code><code>{ }</code>

<code>        </code><code>/// 构造函数 TVisitModel</code>

<code>        </code><code>/// &lt;param name="visitid"&gt;拜访编号&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="visittime"&gt;拜访时间&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="visitcustomer"&gt;拜访对象编号&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="visitway"&gt;拜访方式&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="visitcontent"&gt;拜访内容&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="visitor"&gt;拜访人员&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fremark"&gt;备注&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fsort"&gt;显示顺序&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fisdelete"&gt;是否被删除:默认0&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fcreator"&gt;创建者&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fcreatedate"&gt;创建日期&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fmodify"&gt;修改者&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fmodifydate"&gt;修改日期&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fguid"&gt;唯一标识&lt;/param&gt;</code>

<code>        </code><code>/// &lt;param name="fissynchronous"&gt;是否已同步&lt;/param&gt;</code>

<code>        </code><code>public</code> <code>TVisitModel(</code><code>int</code><code>? visitid, DateTime? visittime, </code><code>int</code><code>? visitcustomer, </code><code>int</code><code>? visitway, </code><code>string</code> <code>visitcontent, </code><code>int</code><code>? visitor, </code><code>string</code> <code>fremark, </code><code>int</code><code>? fsort, </code><code>bool</code><code>? fisdelete, </code><code>string</code> <code>fcreator, DateTime? fcreatedate, </code><code>string</code> <code>fmodify, DateTime? fmodifydate, </code><code>string</code> <code>fguid, </code><code>bool</code><code>? fissynchronous)</code>

<code>            </code><code>this</code><code>.VisitId = visitid;</code>

<code>            </code><code>this</code><code>.VisitTime = visittime;</code>

<code>            </code><code>this</code><code>.VisitCustomer = visitcustomer;</code>

<code>            </code><code>this</code><code>.VisitWay = visitway;</code>

<code>            </code><code>this</code><code>.VisitContent = visitcontent;</code>

<code>            </code><code>this</code><code>.Visitor = visitor;</code>

<code>            </code><code>this</code><code>.FRemark = fremark;</code>

<code>            </code><code>this</code><code>.FSort = fsort;</code>

<code>            </code><code>this</code><code>.FIsDelete = fisdelete;</code>

<code>            </code><code>this</code><code>.FCreator = fcreator;</code>

<code>            </code><code>this</code><code>.FCreateDate = fcreatedate;</code>

<code>            </code><code>this</code><code>.FModify = fmodify;</code>

<code>            </code><code>this</code><code>.FModifyDate = fmodifydate;</code>

<code>            </code><code>this</code><code>.FGUID = fguid;</code>

<code>            </code><code>this</code><code>.FIsSynchronous = fissynchronous;</code>

<code>        </code><code>#region 实体属性</code>

<code>        </code><code>/// 拜访编号</code>

<code>        </code><code>public</code> <code>int</code><code>? VisitId { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 拜访时间</code>

<code>        </code><code>public</code> <code>DateTime? VisitTime { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 拜访对象编号</code>

<code>        </code><code>public</code> <code>int</code><code>? VisitCustomer { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 拜访方式</code>

<code>        </code><code>public</code> <code>int</code><code>? VisitWay { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 拜访内容</code>

<code>        </code><code>public</code> <code>string</code> <code>VisitContent { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 拜访人员</code>

<code>        </code><code>public</code> <code>int</code><code>? Visitor { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 备注</code>

<code>        </code><code>public</code> <code>string</code> <code>FRemark { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 显示顺序</code>

<code>        </code><code>public</code> <code>int</code><code>? FSort { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否被删除:默认0</code>

<code>        </code><code>public</code> <code>bool</code><code>? FIsDelete { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 创建者</code>

<code>        </code><code>public</code> <code>string</code> <code>FCreator { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 创建日期</code>

<code>        </code><code>public</code> <code>DateTime? FCreateDate { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 修改者</code>

<code>        </code><code>public</code> <code>string</code> <code>FModify { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 修改日期</code>

<code>        </code><code>public</code> <code>DateTime? FModifyDate { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 唯一标识</code>

<code>        </code><code>public</code> <code>string</code> <code>FGUID { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否已同步</code>

<code>        </code><code>public</code> <code>bool</code><code>? FIsSynchronous { </code><code>get</code><code>; </code><code>set</code><code>; }</code>

<code>        </code><code>#endregion</code>

<code>        </code><code>#region ICloneable 成员</code>

<code>        </code><code>public</code> <code>object</code> <code>Clone()</code>

<code>            </code><code>return</code> <code>this</code><code>.MemberwiseClone();</code>

<code>        </code><code>public</code> <code>override</code> <code>bool</code> <code>Equals(</code><code>object</code> <code>obj)</code>

<code>            </code><code>Model.TVisitModel model = obj </code><code>as</code> <code>Model.TVisitModel;</code>

<code>            </code><code>if</code> <code>(model != </code><code>null</code> <code>&amp;&amp; model.VisitId == </code><code>this</code><code>.VisitId)</code>

<code>                </code><code>return</code> <code>true</code><code>;</code>

<code>            </code><code>return</code> <code>false</code><code>;</code>

<code>        </code><code>public</code> <code>override</code> <code>int</code> <code>GetHashCode()</code>

<code>            </code><code>return</code> <code>VisitId.GetHashCode();</code>

.NET多层架构告别大学青春

   好了到这里就给大家简单的介绍完了多层架构的基本使用方法了,工厂的核心在于接口的调用,其实也就多了接口的实例化引用对象,可以方便的调用到各种XXOODAL,所以大家如果想用好多层就要学会接口的方法使用。大部分的网站都可以用三层解决的话,是不建议用工厂的,所以掌握住基本的才是王道。

  这次的东西有点多,大家慢慢理解,我会再用一期的时间把这个项目简单的介绍完,让大家知道其中的一些核心写法,具体的细节需要大家自己去写代码去修改和优化。

本文转自 吴雨声 51CTO博客,原文链接:http://blog.51cto.com/liangxiao/1281748,如需转载请自行联系原作者