(本文原標題
源碼程序分析所感——印度
一個不可輕視的近鄰!)
最近在國外網站晃悠
搜集到了不少寶貝
覺得不錯的就漢化調試一下發到
aspx與大家分享
一般代碼美洲和歐洲的朋友發布比較多
這些朋友寫的有個特點那就是比較粗狂
用的技術比較罕見或者前衛(也許是我掌握的膚淺)
一直聽說印度的軟件業比較發達
而且平民化程度也比較高
我以前其實是不以為然的
直到前天下載了一個叫做Timmy M
John印度大學生朋友寫的程序才讓我改變了這個看法
也深刻體會到了了印度軟件業扎實的基礎
還是言歸正傳看看那個代碼吧
是采用
(C#)開發的一個大學課程管理系統
是現在商用程序的一個雛形
主要功能實現大學課程的搜索用戶注冊後可以自行添加課程可以通過後台管理大學以及所屬二級學院等下面是程序抓圖(注
已經liudao漢化調試)


下面是類結構圖

程序的功能方面實現起來並不是很輕松
但是這位印度朋友(Timmy M
John)實現起來
思路清晰簡單明了不像好多朋友一樣一個簡單的程序弄得很復雜
雲山霧罩的
M
John使用的是面向對象開發
我把幾個積累代碼給大家看看吧
先看一下數據庫操作類
DataManagercs


namespace IndiaStudyChannel
Utils



{


/**//// <summary>

/// Summary description for DataManager

/// </summary>

/// 由 liudao 翻譯整理

/// 該源碼下載自(51aspx.com)

public class DataManager


{

public DataManager()


{

}


public static DataTable ExecuteQuery(string query)


{

string connectionString = System
Configuration
ConfigurationSettings
AppSettings[
connectionString
];

SqlConnection connection = new SqlConnection(connectionString);

connection
Open();

try


{

SqlDataAdapter adapter = new SqlDataAdapter(query
connection);

DataSet ds = new DataSet();

adapter
Fill(ds);


return ds
Tables[
];

}

finally


{

if ( connection
State == ConnectionState
Open )

connection
Close();

}

}



public static void ExecuteNonQuery(string query)


{

string connectionString = System
Configuration
ConfigurationSettings
AppSettings[
connectionString
];

SqlConnection connection = new SqlConnection(connectionString);

connection
Open();

try


{

SqlCommand cmd = new SqlCommand();

cmd = connection
CreateCommand();

cmd
CommandType = CommandType
Text;

cmd
CommandText = query;


cmd
ExecuteNonQuery();

}

finally


{

if ( connection
State == ConnectionState
Open )

connection
Close();

}

}


public static object ExecuteScalar(string query)


{

string connectionString = System
Configuration
ConfigurationSettings
AppSettings[
connectionString
];

SqlConnection connection = new SqlConnection(connectionString);

connection
Open();

//

try


{

SqlCommand cmd = new SqlCommand();

cmd = connection
CreateCommand();

cmd
CommandType = CommandType
Text;

cmd
CommandText = query;


return cmd
ExecuteScalar();

}

finally


{

if ( connection
State == ConnectionState
Open )

connection
Close();

}

}

}

}
把常用的sql方法寫成一個類看起來非常清晰功能簡單大家常用的的SqlHelper類既有存儲過程又有sql語句實現的方法讓新手一看就暈(我現在偶爾暈暈)~~
通用函數類(字符串處理等)


namespace IndiaStudyChannel
Utils



{


/**//// <summary>

/// Summary description for Utils

/// </summary>

/// 由 liudao 翻譯整理

/// 該源碼下載自(51aspx.com)

public class Utils


{

public Utils()


{

}



/**//// <summary>

/// This method removes some dangerous characters from the word to avoid
Sql Injection attack

/// </summary>

/// <param name=
s
></param>

/// <returns></returns>

public static string MakeSafeWord(string s)


{

if ( s == null )

return
;


return s
Replace(
)
Replace(
);

}



/**//// <summary>

/// This method checks if the passed user id is an adinistrator or if this is same as current user

/// </summary>

/// <param name=
userId
></param>

/// <returns></returns>

public static bool IsOwner(object userId)


{

if ( System
Web
HttpContext
Current
Session[
CurrentUser
] == null )


{

// There is no userid saved in session
This means user has not logged in

return false;

}


// Get current user from session

string currentUser = System
Web
HttpContext
Current
Session[
CurrentUser
]
ToString();


// Get the admin user id from config file

string adminUser = System
Configuration
ConfigurationSettings
AppSettings[
AdminUser
];


if ( currentUser == adminUser )


{

// Current user is an administrator
Administrator is Owner for all submissions

return true;

}


if ( userId != null && userId
ToString() == currentUser )


{

// Current user is same as the userId passed

return true;

}


return false;

}



/**//// <summary>

/// This method checks if the passed user id is an adinistrator or if this is same as current user

/// </summary>

/// <param name=
userId
></param>

/// <returns></returns>

public static bool IsAdministrator()


{

if ( System
Web
HttpContext
Current
Session[
CurrentUser
] == null )


{

// There is no userid saved in session
This means user has not logged in

return false;

}


// Get current user from session

string currentUser = System
Web
HttpContext
Current
Session[
CurrentUser
]
ToString();


// Get the admin user id from config file

string adminUser = System
Configuration
ConfigurationSettings
AppSettings[
AdminUser
];


if ( currentUser == adminUser )


{

// Current user is an administrator
Administrator is Owner for all submissions

return true;

}


return false;

}


public static string FormatFileName(string s)


{


char[] chars =

{
#
@
?
:
\
\
/
\\
<
>
&
*
(
)
!
;
:
+
=
};

foreach (char c in chars)


{

s = s
Replace(c
);

}

s = s
Replace(
);

s = s
Replace(
);


if ( s
LastIndexOf(
) == (s
Length
) && s
Length >
)


{

s = s
Substring(
s
Length
);

}


return s;

}

}

}
函數的調用也很簡單

protected void Page_Load(object sender
System
EventArgs e)


{

string query =
Select UserId
Name
Email
DateJoined from Members
;


dg
DataSource = Utils
DataManager
ExecuteQuery(query);

dg
DataBind();

}
其他優秀的地方都體現在細節方面
比如Tab菜單的切換
驗證函數的處理等
通過這個程序發現我們在軟件方面要向印度方面學習的確實太多太多
我相信我們之間的差距並不是僅僅因為我們的母語不同而造成的
我們的基礎軟件教育需要反思的太多——為了暫時的小利益而放棄長遠利益(特別是某些民間教育機構)
軟件需求大環境需要反思的太多——有時候是為了編程而寫代碼
感慨太多
所以把這個源碼翻譯了一下特分享給大家來研究
借鑒!
·去除了部分
印度
字樣
·使數據庫等等支持中文字符(修改排序規則
否則中文會變成問號)
·翻譯了大部分菜單及控件名稱
文中有翻譯可笑或者不妥之處還望大家批評指正!(liudao)
該項目的完整源碼下載地址>>
譯者補注
該源碼適合初學者
高手勿下!一個菜鳥認為
優秀
的代碼可能也不足以說明一個國家軟件業的如何如何
但是我們永遠抱著一個學習的虛心態度去對待可能對於我們這個年代的年輕人沒有什麼壞處的!
沒想到文章發完以後引各位朋友這麼熱心的關注
總結一下
·該代碼對於高手來說確實是沒有什麼
優秀
可研
但是思路清晰
使新手容易上手
不雲山霧罩
·大家要抱著初學者的心態來看待這個源碼
過來人想想自己當初走的路
能分享一下經驗最好
·高手應該在這裡引領新手
應該指出新手的不足並提出合理的見解
不是指指點點(這些體現不出你的
高
)
·這裡提到的印度也許是一個理想的不存在的國度——一個需要我們去實現的良好軟件大環境
也許是本人太菜
也許是本人目光短淺
但一個不容置疑的事實——
印度!一個不可輕視的近鄰!
From:http://tw.wingwit.com/Article/program/net/201311/13367.html