明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

網(wǎng)絡(luò)程序設(shè)計(jì)中的模塊化思維

[摘要]首先,以實(shí)際例子說明模塊化對于程序編寫的重要性.例子就是我們現(xiàn)在采用的動網(wǎng)論壇 1 論壇的配色是一個(gè)論壇保持活力的基礎(chǔ),一個(gè)好的配色意味著一個(gè)論壇成功了一半.但我認(rèn)為動網(wǎng)論壇的配色是及其浪費(fèi)資源的,同時(shí)后臺操作也異常麻煩.首先,它將CSS的各個(gè)定義部分存儲到數(shù)據(jù)庫,在打開頁面時(shí)再調(diào)用,如 ----...

首先,以實(shí)際例子說明模塊化對于程序編寫的重要性.例子就是我們現(xiàn)在采用的動網(wǎng)論壇

1 論壇的配色是一個(gè)論壇保持活力的基礎(chǔ),一個(gè)好的配色意味著一個(gè)論壇成功了一半.但我認(rèn)為動網(wǎng)論壇的配色是及其浪費(fèi)資源的,同時(shí)后臺操作也異常麻煩.首先,它將CSS的各個(gè)定義部分存儲到數(shù)據(jù)庫,在打開頁面時(shí)再調(diào)用,如
--------------------------
<%
'打開數(shù)據(jù)庫代碼省略
dim bgcolor1
bgcolor1=rs("bgcolor1")
rs.close
set rs=nothing
%>
<table><tr><td bgcolor='<%=bgcolor1%>'></td></tr></table>
--------------------------
采用這種方法,在查詢數(shù)據(jù)庫內(nèi)容較少時(shí)還說的過去,但一個(gè)頁面的CSS定義多達(dá)幾十項(xiàng)而且每頁都要調(diào)用時(shí),這段代碼就顯得尤其白癡了.試試以下這種方法:
--------------------------
<%
'1.CSS文件為頁面STYLE文件,我們將其文件路徑儲存到數(shù)據(jù)庫中
Dim style1=Rs("style")
%>
<html><head>
<link rel="stylesheet" type="text/css" href="<%=style1%>">
</head>
---------------------------
這種方法要比上面動網(wǎng)的方法快的多,而且大大減少了資源,這就是模塊化的好處之一
可能有些朋友還不明白什么是模塊化,我還是老習(xí)慣,用個(gè)實(shí)例向大家說明.該實(shí)例是寫一個(gè)簡單的留言本,當(dāng)然事實(shí)上,留言本這么小的一個(gè)程序一般是不需要模塊化的,我只是說明一下.

我們要求這個(gè)留言本必須注冊了才能留言,只有管理員能夠回復(fù).按照一般的寫法,我們會寫一個(gè)單獨(dú)的登陸頁面,然后當(dāng)用戶沒注冊進(jìn)入留言頁面時(shí)自動跳轉(zhuǎn)到登陸頁面,或用iframe包含該頁面.當(dāng)然,我們還要寫一個(gè)注冊頁面,一個(gè)回復(fù)頁面

當(dāng)使用模塊化后,我們僅僅只需要2個(gè)文件就能搞定它,一個(gè)顯示頁面/gb.asp,一個(gè)模塊頁面/mod.asp
思路是這樣的:
1 將 顯示留言 登陸 注冊 寫留言 等等功能分別模塊話,如登陸功能
-----------
<%
'MOD.ASP中登陸模塊
Sub gb_login()
%>
<form action='gb.asp?action=login' method=post>
<input type=text name='loginname' size=12>
<input type=password name='loginpass' size=12>
<input type=submit value='登陸'>
</form>
<%
End Sub
'處理登陸的模塊
Sub gb_logincheck()
Dim a1,a2
a1=Request.form("loginname")
a2=request.form("loginpass")
'打開數(shù)據(jù)庫語句省略
if a2=rs("pass") then
session("name")=a1
end if
Response.Redirect "gb.asp"
End Sub
%>

然后我們可以在留言主頁面這樣調(diào)用
<%
Dim action
action=Request("action")
if action="login" then
gb_logincheck()
else
if session("name")="" then
gb_login()
end if
end if
%>
----------------------
當(dāng)然上面的實(shí)例還很不完全,我們按照這個(gè)思路可以將所有功能定義成一個(gè)子過程統(tǒng)一放在一個(gè)文件里,需要用時(shí)在調(diào)用

通過上面的實(shí)例,我們應(yīng)該了解了什么是模塊化
模塊是指程序中的一段代碼,該段代碼能實(shí)現(xiàn)程序中的某一功能并能獨(dú)立或半獨(dú)立運(yùn)行.該語句段的非致命錯(cuò)誤并不能導(dǎo)致整個(gè)程序癱瘓,只是使程序喪失部分功能.
模塊能夠重復(fù)調(diào)用,根據(jù)程序的特殊性,模塊中能夠包含其他模塊,結(jié)合其他模塊運(yùn)行

在大型程序編寫中,模塊話的運(yùn)用是不可避免的.還是以動網(wǎng)為例,大家可以看看動網(wǎng)的源碼,它也大量運(yùn)用了子過程,對于整個(gè)程序運(yùn)行有很大作用.但是存在著很多錯(cuò)誤和缺陷.
比如
1 動網(wǎng)論壇中從頭到尾數(shù)據(jù)庫的連接都是打開的,而且很多地方多次打開數(shù)據(jù)庫,卻找不到關(guān)閉數(shù)據(jù)庫連接的代碼,這就是很多用東網(wǎng)的朋友說論壇慢的原因所在
分析它的源碼,我們可以發(fā)現(xiàn)他將打開數(shù)據(jù)庫的代碼放在一個(gè)文件里,然后將關(guān)閉數(shù)據(jù)庫的代碼放在一個(gè)函數(shù)里.我覺得很奇怪,為什么不把打開數(shù)據(jù)庫也作為一個(gè)子過程或函數(shù)調(diào)用呢?
一個(gè)很好的方法用了一半就不用了實(shí)在可惜!!瀏覽很多WEB程序的源碼,也大多存在這種龍頭蛇尾的現(xiàn)象.

2 很多模塊存在著無數(shù)的錯(cuò)誤.最明顯的就是在線人數(shù),呵呵,象我們論壇經(jīng)常出現(xiàn)在線游客幾百人的情況.而事實(shí)上大家都知道來我們論壇的人絕對不會不登陸的!這個(gè)錯(cuò)誤我不想講太多,因?yàn)槿绻覍?我絕對會換個(gè)方法寫.

模塊化的優(yōu)秀典范有很多,在論壇程序上將模塊化運(yùn)用的異常成功的當(dāng)推PHPBB,大家可以去他的官方網(wǎng)站看看[http://www.phpbb.com ]

當(dāng)然,我們沒有必要將一個(gè)程序的所有代碼都模塊化,這樣反而適得其反.什么代碼段應(yīng)該模塊化呢,我認(rèn)為應(yīng)該具備以下條件
1 大量在多個(gè)頁面或程序中重復(fù)使用的代碼段
2 有待進(jìn)一步開發(fā)的代碼段
3 程序中的關(guān)鍵功能,核心內(nèi)容
4 能擴(kuò)展第三方插件的代碼段

OK,講到這應(yīng)該告一段落了,最后總結(jié)以下模塊化的定義和特點(diǎn)

在程序設(shè)計(jì)特別是WEB程序設(shè)計(jì)中,我們采用模塊化有以下好處:
1 大大減少代碼行
2 使程序的結(jié)構(gòu)清晰,在查找錯(cuò)誤時(shí)目標(biāo)范圍大大減小
3 當(dāng)程序需要添加新的功能或修改某功能時(shí),我們要作的僅僅是寫出一個(gè)新的模塊或?qū)δ骋荒K進(jìn)行修改,而無需對整個(gè)程序進(jìn)行大手術(shù).因?yàn)檫@個(gè)原因,模塊化也創(chuàng)造了良好的接口環(huán)境,便于開發(fā)第三方擴(kuò)展功能

當(dāng)然,模塊化也存在著缺陷:
1 在設(shè)計(jì)模塊時(shí)必須考慮模塊間是否有沖突,有時(shí)候會發(fā)生很多意想不到的錯(cuò)誤
2 模塊中必須保持清楚的結(jié)構(gòu),有些模塊間的互動性導(dǎo)致在編寫程序中原本無序的代碼必須排序

但,模塊化的優(yōu)點(diǎn)是顯而易見的,對于一個(gè)想用最少代碼寫出最強(qiáng)大功能的WEB程序的程序員而言,他還有理由拒絕它嗎?