這個項目我在分析設計的時候采用了3層構架。我的基本思想是只要和數據庫交互的字段和控件,我都把它當作參數傳給中間層,然后中間層調用數據層的runCommand()方法,從而達到了各層分工明細的目的。在驗證表單方面,我使用了JS,在客戶端驗證,可以減低服務器壓力。
下面是一段注冊用戶的代碼:
//register.cs
//通過一個提交事件,將控件值傳入業務層
private void Submit_ServerClick(object sender, System.EventArgs e)
{
UserInfo user=new UserInfo();
user.AddUser(this.UserName.Value,this.PasswordR.Value,this.Email.Value,this.Homepage.Value,
this.show_face.Src);
}
//UserInfo.cs
public void AddUser(string username,string passwords,string email,
string homepage,string face)
{
Database data = new Database();
OleDbParameter[] prams={
data.MakeInParam("@username",OleDbType.VarChar,16),
data.MakeInParam("@passwords",OleDbType.VarChar,12),
data.MakeInParam("@email",OleDbType.VarChar,50),
data.MakeInParam("@homepage",OleDbType.VarChar,50),
data.MakeInParam("@face",OleDbType.VarChar,50)
};
//SQL語句
strcmd="insert into Users(username,passwords,email,homepage,face) values (@username, @passwords, @email, @homepage, @face)";
//將傳入的參數放進數組里
string[] values={username,passwords, email, homepage, face};
//將數據庫相對應每個字段的變量放進數組
string[] datacolumn={"@username","@passwords", "@email", "@homepage", "@face"};
//調用數據層的runCommand()方法
data.runCommand(strcmd,prams,datacolumn,values);
}
//Database.cs
//返回一個OleDbParameter對象
public OleDbParameter MakeInParam(string ParamName, OleDbType DbType,int size)
{
OleDbParameter param;
return param=new OleDbParameter(ParamName,DbType,size);
}
public void runCommand(string strcmd,OleDbParameter[] prams,string[] datacolumn,string[] values)
{
OleDbDataAdapter cmd = new OleDbDataAdapter(strcmd, conn);
this.Open();
if (prams != null)
{
//2個循環主要是為了創建
// cmd.SelectCommand.Parameters.Add(new OleDbParameter ("@username",OleDbType.VarChar,16));
//賦值
// cmd.SelectCommand.Parameters[@username].Value=username;
//我這樣設計主要是為了考慮如果以后要添加或刪除用戶信息的話,
//我只要修改業務層
foreach (OleDbParameter parameter in prams)
{
cmd.SelectCommand.Parameters.Add(parameter);
}
for(int i=0;i<values.Length;i++)
{
cmd.SelectCommand.Parameters[datacolumn[i]].Value=values[i];
}
}
cmd.SelectCommand.ExecuteNonQuery();
this.Close();
}
完成項目后,我發現了很多問題,試著想去改,怕破壞原來的結構,總的來說還是失敗了,我總結了以下經驗和問題:
1.在多表操作的時候應該使用存儲過程,因為句子一長很容易錯,而且調試后才能知道結果,如果是存儲過程的話可以在MSSQL中驗證語句是否錯誤。當然存儲過程還有其他優點。
2.用JS腳本驗證表單。我覺得比.NET提供的驗證控件方便多了,而且本地驗證減少網絡傳輸中這樣那樣的問題。
3.我有次在別人機子上調試的出了問題:老是報:“該操作不是一個可更新的操作。”我郁悶了好久,最后在別人帖子了找到了答案,原來是WINDOWS權限問題,那機子用的是WINDOWS2003。
4.我覺得象我這樣普通的畢業生,軟件工程對我來說太渺茫了,根本就沒法達到自己預期的理想,就算是分析時設計到的功能,但在代碼實現時被自己設計的框架而卡住。所以我就有個疑問:是拿別人的設計書寫好,還是自己設計自己寫好?雖然我時常偷窺某人設計書,但是終不得精髓。(就像有了內功新法確缺少套路一樣)
5.戒驕戒躁。我覺得驕傲煩躁這是編程大忌。林銳博士一本書寫到他同學編程的時候,說他編程的時候簡直不是人,就是個指針。可能這就是高手和普通人的區別把