天天看點

.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,如需轉載請自行聯系原作者