(本文原标题
源码程序分析所感——印度
一个不可轻视的近邻!)
最近在国外网站晃悠搜集到了不少宝贝觉得不错的就汉化调试一下发到aspx与大家分享一般代码美洲和欧洲的朋友发布比较多这些朋友写的有个特点那就是比较粗狂用的技术比较罕见或者前卫(也许是我掌握的肤浅)
一直听说印度的软件业比较发达而且平民化程度也比较高我以前其实是不以为然的直到前天下载了一个叫做Timmy MJohn印度大学生朋友写的程序才让我改变了这个看法也深刻体会到了了印度软件业扎实的基础还是言归正传看看那个代码吧是采用(C#)开发的一个大学课程管理系统是现在商用程序的一个雏形主要功能实现大学课程的搜索用户注册后可以自行添加课程可以通过后台管理大学以及所属二级学院等下面是程序抓图(注已经liudao汉化调试)
下面是类结构图
程序的功能方面实现起来并不是很轻松但是这位印度朋友(Timmy MJohn)实现起来思路清晰简单明了不像好多朋友一样一个简单的程序弄得很复杂云山雾罩的
MJohn使用的是面向对象开发我把几个积累代码给大家看看吧先看一下数据库操作类
DataManagercs
namespaceIndiaStudyChannelUtils
{
/**////<summary>
///SummarydescriptionforDataManager
///</summary>
///由liudao翻译整理
///该源码下载自(51aspx.com)
publicclassDataManager
{
publicDataManager()
{
}
publicstaticDataTableExecuteQuery(stringquery)
{
stringconnectionString=SystemConfigurationConfigurationSettingsAppSettings[connectionString];
SqlConnectionconnection=newSqlConnection(connectionString);
connectionOpen();
try
{
SqlDataAdapteradapter=newSqlDataAdapter(queryconnection);
DataSetds=newDataSet();
adapterFill(ds);
returndsTables[];
}
finally
{
if(connectionState==ConnectionStateOpen)
connectionClose();
}
}
publicstaticvoidExecuteNonQuery(stringquery)
{
stringconnectionString=SystemConfigurationConfigurationSettingsAppSettings[connectionString];
SqlConnectionconnection=newSqlConnection(connectionString);
connectionOpen();
try
{
SqlCommandcmd=newSqlCommand();
cmd=connectionCreateCommand();
cmdCommandType=CommandTypeText;
cmdCommandText=query;
cmdExecuteNonQuery();
}
finally
{
if(connectionState==ConnectionStateOpen)
connectionClose();
}
}
publicstaticobjectExecuteScalar(stringquery)
{
stringconnectionString=SystemConfigurationConfigurationSettingsAppSettings[connectionString];
SqlConnectionconnection=newSqlConnection(connectionString);
connectionOpen();
//
try
{
SqlCommandcmd=newSqlCommand();
cmd=connectionCreateCommand();
cmdCommandType=CommandTypeText;
cmdCommandText=query;
returncmdExecuteScalar();
}
finally
{
if(connectionState==ConnectionStateOpen)
connectionClose();
}
}
}
}
把常用的sql方法写成一个类看起来非常清晰功能简单大家常用的的SqlHelper类既有存储过程又有sql语句实现的方法让新手一看就晕(我现在偶尔晕晕)~~
通用函数类(字符串处理等)
namespaceIndiaStudyChannelUtils
{
/**////<summary>
///SummarydescriptionforUtils
///</summary>
///由liudao翻译整理
///该源码下载自(51aspx.com)
publicclassUtils
{
publicUtils()
{
}
/**////<summary>
///ThismethodremovessomedangerouscharactersfromthewordtoavoidSqlInjectionattack
///</summary>
///<paramname=s></param>
///<returns></returns>
publicstaticstringMakeSafeWord(strings)
{
if(s==null)
return;
returnsReplace()Replace();
}
/**////<summary>
///Thismethodchecksifthepasseduseridisanadinistratororifthisissameascurrentuser
///</summary>
///<paramname=userId></param>
///<returns></returns>
publicstaticboolIsOwner(objectuserId)
{
if(SystemWebHttpContextCurrentSession[CurrentUser]==null)
{
//ThereisnouseridsavedinsessionThismeansuserhasnotloggedin
returnfalse;
}
//Getcurrentuserfromsession
stringcurrentUser=SystemWebHttpContextCurrentSession[CurrentUser]ToString();
//Gettheadminuseridfromconfigfile
stringadminUser=SystemConfigurationConfigurationSettingsAppSettings[AdminUser];
if(currentUser==adminUser)
{
//CurrentuserisanadministratorAdministratorisOwnerforallsubmissions
returntrue;
}
if(userId!=null&&userIdToString()==currentUser)
{
//CurrentuserissameastheuserIdpassed
returntrue;
}
returnfalse;
}
/**////<summary>
///Thismethodchecksifthepasseduseridisanadinistratororifthisissameascurrentuser
///</summary>
///<paramname=userId></param>
///<returns></returns>
publicstaticboolIsAdministrator()
{
if(SystemWebHttpContextCurrentSession[CurrentUser]==null)
{
//ThereisnouseridsavedinsessionThismeansuserhasnotloggedin
returnfalse;
}
//Getcurrentuserfromsession
stringcurrentUser=SystemWebHttpContextCurrentSession[CurrentUser]ToString();
//Gettheadminuseridfromconfigfile
stringadminUser=SystemConfigurationConfigurationSettingsAppSettings[AdminUser];
if(currentUser==adminUser)
{
//CurrentuserisanadministratorAdministratorisOwnerforallsubmissions
returntrue;
}
returnfalse;
}
publicstaticstringFormatFileName(strings)
{
char[]chars={#@?:\\/\\<>&*()!;:+=};
foreach(charcinchars)
{
s=sReplace(c);
}
s=sReplace();
s=sReplace();
if(sLastIndexOf()==(sLength)&&sLength>)
{
s=sSubstring(sLength);
}
returns;
}
}
}
函数的调用也很简单
protectedvoidPage_Load(objectsenderSystemEventArgse)
{
stringquery=SelectUserIdNameEmailDateJoinedfromMembers;
dgDataSource=UtilsDataManagerExecuteQuery(query);
dgDataBind();
}
其他优秀的地方都体现在细节方面比如Tab菜单的切换验证函数的处理等
通过这个程序发现我们在软件方面要向印度方面学习的确实太多太多我相信我们之间的差距并不是仅仅因为我们的母语不同而造成的我们的基础软件教育需要反思的太多——为了暂时的小利益而放弃长远利益(特别是某些民间教育机构)软件需求大环境需要反思的太多——有时候是为了编程而写代码感慨太多所以把这个源码翻译了一下特分享给大家来研究借鑒!
·去除了部分印度字样
·使数据库等等支持中文字符(修改排序规则否则中文会变成问号)
·翻译了大部分菜单及控件名称
文中有翻译可笑或者不妥之处还望大家批评指正!(liudao)
该项目的完整源码下载地址>>
译者补注该源码适合初学者高手勿下!一个菜鸟认为优秀的代码可能也不足以说明一个国家软件业的如何如何但是我们永远抱着一个学习的虚心态度去对待可能对于我们这个年代的年轻人没有什么坏处的!
没想到文章发完以后引各位朋友这么热心的关注总结一下
·该代码对于高手来说确实是没有什么优秀可研但是思路清晰使新手容易上手不云山雾罩
·大家要抱着初学者的心态来看待这个源码过来人想想自己当初走的路能分享一下经验最好
·高手应该在这里引领新手应该指出新手的不足并提出合理的见解不是指指点点(这些体现不出你的高)
·这里提到的印度也许是一个理想的不存在的国度——一个需要我们去实现的良好软件大环境
也许是本人太菜也许是本人目光短浅但一个不容置疑的事实——
印度!一个不可轻视的近邻!