OnePiece 之 Asp.Net 菜鳥也來做開發(四)
YY部分僅供娛樂,請勿拍磚。正文部分,如有錯誤或不足,歡迎拍磚、指正。
第三章 : OnePiece—數據庫設計
嗯,基本的準備工作也做得差不多了。今天我們就在眾神的保佑下來做本系統的數據庫設計。 由于“OnePiece”的神力太大,春哥交待過,以我現在的功力是斷然不能夠一下全部做出來的,心太貪了到時候系統沒有做出來,人先廢掉了,那才是郁悶啊。所以,春哥叫先做系統的新聞模塊,我們就從新聞模塊做起吧。說白了也就是做一個傳說中的新聞發布系統。
在做這個系統之前先說說我們整個系統的架構吧。系統架構,有我只聞其名的MVC,有多層架構,也有一些其它我還不聞其名的架構,這些方案都有自己的優缺點,如果你很感興趣的話可以問問神器“Google”,這里我就不多說了,因為事實上我對它們的了解也不多。關于這個系統的開發,我們采用多層架構來開發,為什么要采用多層架構呢?很簡單:因為這是目前唯一一個我知其名且勉強能會其意的架構,呃。。。狂吐血中。那么什么是多層架構呢?
多層架構,就是“通過分解業務細節,將不同的功能代碼分散開來,更利于系統的設計和開發,同時為可能的變更提供了更小的單元?!保ú缓靡馑?,我網上找到的一個解釋之一,我覺得和我的理解差不多,也就是這個意思,把不同的操作封裝在不同的層當中,每個層都只負責自己部分的工作,而不用去當心其它的工作怎么完成。這樣就為團隊開發提供了方便,我們可以根據計劃分開編寫代碼。當然同時也對系統的模塊化和細化也有很大的作用。)下面來一個多層架構的典型圖解:

上圖是一個典型的三層架構:
1、表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。
2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。
3、數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、更新、查找等。
層是一種弱耦合結構,層與層之間的依賴是向下的,底層對于上層而言是“無知”的,改變上層的設計對于其調用的底層而言沒有任何影響。如果在分層設計時,遵循了面向接口設計的思想,那么這種向下的依賴也應該是一種弱依賴關系。因而在不改變接口定義的前提下,理想的分層式架構,應該是一個支持可抽取、可替換的“抽屜”式架構。
三層架構的優缺點:
優點:
1、開發人員可以只關注整個結構中的其中某一層;
2、可以很容易的用新的實現來替換原有層次的實現;
3、可以降低層與層之間的依賴;
4、有利于標準化;
5、利于各層邏輯的復用。
缺點:
1、降低了系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼。
但是隨著軟件行業的發展,以及各種系統的業務越來越復雜,傳統的三層架構已經有點不能勝任了,于是出現了,在傳統的三層架構上發展而來的多層架構:

關于這些理論的東西就說這么多了,因我我也只知道這么點了。呃。。。。。。園里有一篇介紹.Net的三層架構的文章大家可以看看:.Net三層架構
本系統分層:DAL:數據訪問層(持久層);Model:模型層;BLL:業務邏輯層;WebUI:Web界面層;
呃,關于架構就說這么多。現在正式進入數據庫設計,前面也說過了,我們先把系統中的新聞模塊完成所以數據庫的設計也先從新聞模塊做起,其它的模塊在后續的開發中再來進行設計編寫(這在實際開發中顯然是不行滴,但是由于我也只是第一次做開發,而且沒有外界壓力的,所以就先這么做了)
新聞模塊的要求,如果忘記了的可以看看前面的系統分析,這里就不多說了。根據系統要求我抽象出了三個類,這三個類也就是我們設計數據庫的根據:
NewsCategory類:新聞類別類,由于系統要求新聞類要有層次而且還要可以根據而要進行排序,所以在剛開始設計時其中加入了rank排序值 level所屬層 higherCaID上層的ID。寫這個的時候才發現,level好像用不著?。。。暫先留在這里把。大概是用不著的了,那就把Level屬性去掉。
1 /*
2 *創建人:Cat_Lee
3 *創建時間:2009/8/26 14:43:03
4 *說明:新聞類別類
5 *版權所有:Cat_Lee
6 *歡迎訪問我的Blog:http://www.rzrgm.cn/cat-lee/
7 */
8 using System;
9 using System.Collections.Generic;
10 using System.Linq;
11 using System.Text;
12
13 namespace Model
14 {
15 public class NewsCategory
16 {
17 private int id;
18 private int higherCaID;
19 private int rank;
20 private string name;
21 /// <summary>
22 /// 無參構造函數
23 /// </summary>
24 public NewsCategory()
25 {
26 higherCaID = -1;//-1表示是最高層,沒有上層類別
27 }
28 /// <summary>
29 /// 構造函數
30 /// </summary>
31 /// <param name="name">類別名,默認為最高層</param>
32 public NewsCategory(string name)
33 {
34 higherCaID=-1;
35 this.name=name;
36 }
37 /// <summary>
38 /// 構造函數
39 /// </summary>
40 /// <param name="name">類別名,默認為最高層</param>
41 /// <param name="rank">排序值</param>
42 public NewsCategory(string name, int rank)
43 {
44 higherCaID = -1;
45 this.name = name;
46 this.rank = rank;
47 }
48 /// <summary>
49 /// 構造函數
50 /// </summary>
51 /// <param name="name">類別名</param>
52 /// <param name="rank">排序值</param>
53 /// <param name="higherCaID">上一級類別ID</param>
54 public NewsCategory(string name, int rank, int higherCaID)
55 {
56 this.name = name;
57 this.rank = rank;
58 this.higherCaID = higherCaID;
59 }
60 /// <summary>
61 /// 類別ID
62 /// </summary>
63 public int ID
64 {
65 get
66 {
67 return id;
68 }
69 set
70 {
71 id = value;
72 }
73 }
74 /// <summary>
75 /// 上級類別ID
76 /// </summary>
77 public int HigherCaID
78 {
79 get
80 {
81 return higherCaID;
82 }
83 set
84 {
85 higherCaID = value;
86 }
87 }
88 /// <summary>
89 /// 排序值
90 /// </summary>
91 public int Rank
92 {
93 set
94 {
95 rank = value;
96 }
97 get
98 {
99 return rank;
100 }
101 }
102 /// <summary>
103 /// 類別名
104 /// </summary>
105 public string Name
106 {
107 set
108 {
109 name = value;
110 }
111 get
112 {
113 return name;
114 }
115 }
116 }
117 }
118
News類:新聞實體類。我想其中的名字應該可以自釋意。所以就不詳說了。只說明一點,其中的圖片titleImage和newsImages都是采用保存圖片路徑來保存圖片信息的,我也想過另建一個圖片表來專門管理圖片。不知道哪種方案好就采用了這個方法。你有什么好的建議也可以講講哦。
1 /*
2 *創建人:Cat_Lee
3 *創建時間:2009/8/20 22:00:05
4 *說明:新聞類
5 *版權所有: Cat_Lee
6 *歡迎訪問我的Blog:http://www.rzrgm.cn/cat-lee/
7 */
8 using System;
9 using System.Collections.Generic;
10 using System.Linq;
11 using System.Text;
12
13 namespace Model
14 {
15 public class News
16 {
17 private string title;
18 private int id;
19 private string content;
20 private int caID;
21 private int rank;
22 private bool isNew;
23 private bool isHot;
24 private bool isRecommend;
25 private string titleImages;
26 private string author;
27 private string source;
28 private string newsImages;
29 private DateTime publishTime;
30 /// <summary>
31 /// 初始化,避免出現空引用異常
32 /// </summary>
33 public News()
34 {
35 title = "";
36 content = "";
37 titleImages = "";
38 author = "";
39 source = "";
40 newsImages = "";
41 }
42 /// <summary>
43 /// 發布時間
44 /// </summary>
45 public DateTime PublishTime
46 {
47 set
48 {
49 publishTime = value;
50 }
51 get
52 {
53 return publishTime;
54 }
55 }
56 /// <summary>
57 /// 標題
58 /// </summary>
59 public string Title
60 {
61 get
62 {
63 return title;
64 }
65 set
66 {
67 title = value;
68 }
69 }
70 /// <summary>
71 /// 新聞ID
72 /// </summary>
73 public int ID
74 {
75 get
76 {
77 return id;
78 }
79 set
80 {
81 id = value;
82 }
83 }
84 /// <summary>
85 /// 所屬類別ID
86 /// </summary>
87 public int CaID
88 {
89 get
90 {
91 return caID;
92 }
93 set
94 {
95 caID = value;
96 }
97 }
98 /// <summary>
99 /// 新聞內容
100 /// </summary>
101 public string Content
102 {
103 set
104 {
105 content = value;
106 }
107 get
108 {
109 return content;
110 }
111 }
112 /// <summary>
113 /// 排序值
114 /// </summary>
115 public int Rank
116 {
117 set
118 {
119 rank = value;
120 }
121 get
122 {
123 return rank;
124 }
125 }
126 /// <summary>
127 /// 是否最新
128 /// </summary>
129 public bool IsNew
130 {
131 set
132 {
133 isNew = value;
134 }
135 get
136 {
137 return isNew;
138 }
139 }
140 /// <summary>
141 /// 是否熱點
142 /// </summary>
143 public bool IsHot
144 {
145 set
146 {
147 isHot = value;
148 }
149 get
150 {
151 return isHot;
152 }
153 }
154 /// <summary>
155 /// 是否推薦
156 /// </summary>
157 public bool IsRecommend
158 {
159 set
160 {
161 isRecommend = value;
162 }
163 get
164 {
165 return isRecommend;
166 }
167 }
168 /// <summary>
169 /// 標題圖片
170 /// </summary>
171 public string TitleImages
172 {
173 set
174 {
175 titleImages = value;
176 }
177 get
178 {
179 return titleImages;
180 }
181 }
182 /// <summary>
183 /// 新聞作者
184 /// </summary>
185 public string Author
186 {
187 set
188 {
189 author = value;
190 }
191 get
192 {
193 return author;
194 }
195 }
196 /// <summary>
197 /// 新聞來源
198 /// </summary>
199 public string Source
200 {
201 set
202 {
203 source = value;
204 }
205 get
206 {
207 return source;
208 }
209 }
210 /// <summary>
211 /// 新聞圖片
212 /// </summary>
213 public string NewsImages
214 {
215 set
216 {
217 newsImages = value;
218 }
219 get
220 {
221 return newsImages;
222 }
223 }
224
225 }
226 }
227
Comment類:新聞評論類。注:user屬性后來發現改為UserID比較好,和用戶表中的用戶ID關聯。如果是非注冊用戶則和用戶表中的特定ID關聯。
1 /*
2 *創建人:Cat_Lee
3 *創建時間:2009/8/26 14:42:35
4 *說明:新聞評論類
5 *版權所有: Cat_Lee
6 *歡迎訪問我的Blog:http://www.rzrgm.cn/cat-lee/
7 */
8 using System;
9 using System.Collections.Generic;
10 using System.Linq;
11 using System.Text;
12
13 namespace Model
14 {
15 public class NewsComment
16 {
17 private int id;
18 private int newsID;
19 private int userID;
20 private DateTime commentTime;
21 private string content;
22
23 public NewsComment()
24 {
25 content = "";
26 }
27 /// <summary>
28 /// 評論ID
29 /// </summary>
30 public int ID
31 {
32 set
33 {
34 id = value;
35 }
36 get
37 {
38 return id;
39 }
40 }
41 /// <summary>
42 ///所屬新聞ID
43 /// </summary>
44 public int NewsID
45 {
46 get
47 {
48 return newsID;
49 }
50 set
51 {
52 newsID = value;
53 }
54 }
55 /// <summary>
56 /// 評論人ID
57 /// </summary>
58 public int UserID
59 {
60 get
61 {
62 return userID;
63 }
64 set
65 {
66 userID = value;
67 }
68 }
69 /// <summary>
70 /// 評論時間
71 /// </summary>
72 public DateTime CommentTime
73 {
74 get
75 {
76 return commentTime;
77 }
78 set
79 {
80 commentTime = value;
81 }
82 }
83 /// <summary>
84 /// 評論內容
85 /// </summary>
86 public string Content
87 {
88 set
89 {
90 content = value;
91 }
92 get
93 {
94 return content;
95 }
96 }
97
98 }
99 }
100
根據類設計出來 的數據庫如下圖:形成一條鏈式的關系結構,News的CategoryID與NewsCategory的ID關聯、Comment的NewsID與News的ID關聯。以表示它們的從屬關系。
呃,數據庫基本就是這個樣子的。以后還會逐步完善。
小小菜鳥沒有開發經驗,對于本系列開發也沒有做什么準備,所以其中不免有錯誤或遺漏,還請諸位不吝賜教,小弟在此感激不盡。另外,由于在做OnePiece的開發的同時我也在不斷的學習和解決當中遇到的問題。所以文章發布的日期間隔或許會有些長,還請各位看官見諒。
下集預告:第四章 : OnePiece—新聞模塊的數據訪問層;
Finish Whatever U've Started !!!


浙公網安備 33010602011771號