天就要大过年了,今天还在公司上班,闲着没事,在这里说下自己的心得.
如果你还是一名菜鸟,或者你才接触程序不久,我建议你看下去.
对于程序员来说,不论你采用何种语言,那都是次要的,不论你开发的是桌面应用程序还是WEB应用程序,那也是次要的,好的思想胜于具体的语言,好的程序架构胜于具体的运用类型,所以编程方面,没有什么最好或者最差的编程语言,不要认为你是学习Java的,你就认为.NET如何如何不好,也不要因为自己是.NET的拥戴者,你就嘲讽Java的如何如何,这个世界,没有什么事情是绝对的,如果你硬要说绝对的化,那么唯一的绝对,那就是每个人都会死.(别钻牛角尖了,这里不是想讨论这个,分享经验和思想而已)每种语言都有自己的特性和优劣,根据具体情况做选择,才是一名优秀的程序员才应该具备的.也不要因为你喜欢开发桌面应用程序,而嫌弃WEB应用程序如何如何,更不要因为你是开发WEB应用的,就喜欢说桌面又如何如何,桌面和WEB又有什么不同呢?我不知道各位是怎么想的,各位处在何种境界考虑这个问题.就我而言,以程序的分析方法来说,程序就是一个抽象类,然后从这个抽象类从派生处了具体的应用程序类型,所以不论是WEB还是桌面,乃至是PDA以及手机,开发思想都是一样的,运用良好的分层框架设计,一套代码,可以运用在许多种类型的运用程序上,所以现在的程序没必要分的那么严格了.
再来就是说下理论与实践吧,我不知道大家这么看待这个问题,我教导的一位朋友(现在还在读大学,今年毕业).和他说到这个的时候,他跟我说,他还是喜欢多练习,练习多了.他自然就会了,关于理论什么的,那些太模糊了,不如实践更容易理解.还有我曾经帮助的一位厦门大学的朋友.她曾经问过我许多问题,我都给了她解决方案,并接从原理到步骤中进行了详细分析.她问我写了多少程序,我说我没写多少,只看数.她居然说不实践成长不了的.我当时觉得很可笑吧.但是没说什么,对于任何事情来说,实践固然重要,也应该是非常重要的.但是理论更加的重要,好的实践的基础离不开坚实的理论基础,试想下,我是没亲自去敲代码,但是如果我能把一个程序,从开始运行到最后结束,每行代码都说出来,你认为我能不能写出这个程序了.实践不能让你的水平有所提高的,它所提高的只是你的开发效率,以及记忆程度,如果你提高技术能力,理论还是绝对重要的.不要给自己找理由,强化理论基础,加强使用技巧经验才是王道.
再者就是开发观念,建议明白下你所使用的语言究竟是什么语言,不要自己认为自己懂的,我曾经看到过许多团队的开发人员,使用.NET开发网站,那代码真的写的让我佩服的想哭了.烂的可以了,不要因为你使用的是面向对象语言,你就认为自己是在做面向对象设计与开发了,这种思想是极度错误的.关于面向对象的三大特性:继承,,封装,多态.你自己好好问下你自己,你究竟了解多少,你在实际中又就将考虑了多少.面向对象的三大特性,使用起来确实不会让你的程序书写起来更加的容易,它可能使你原来很简单的一个程序难度提高2-10倍,甚至更多,但是这种设计上的付出,收获也是巨大的.关于这三个特性,最好的组合就是设计模式的运用,良好的设计模式的使用使得写出来的代码优美,可复用性高,易扩展.对于设计模式,也别觉得有什么困难的,所谓的设计模式也就是一种开发思想而已,很简单,记住良好的软件的5大原则:单一职责原则,开闭原则,依赖倒转原则等,再配合已经存在的23种设计模式,根据具体情况分析选择设计,举一反三就可以了.不要因为这样麻烦,就不这么去考虑问题,如果你只想继续当菜鸟,那我没什么好说的.毕竟各人追求不同.我记得曾经面试一个公司,我带这自己的作品去面试,看了一眼他们的软件开发代码,我无语了,面向过程开发用的好熟练,程序员的CV功夫也运用的很熟练,后来我再介绍自己的代码的时候,结果批评了他们那么做的缺点(结果不用说你们都知道了,当然是没戏了,但是不管怎么样,提高自己的技术修养和思想还是蛮重要的)。
2009年会如何,很难说,但是可以肯定的一点就是,我会成功的转型为一名软件架构师。在这里献上自己的点点看法和心的。其他的就不多废话了,毕竟每个人的看法都不一样,我也无法明白别人怎么定位,但是我知道自己对自己的要求,理论越强大,思考的越多,看到的方法越多,所能想到的解决方案也就越多。也就越接近更高的境界了。
最后我分享下自己认为的最好的数据库辅助类的写法。(如果大家有什么更好的方法,欢迎跟帖。对于学习,我时刻都在更新自己的经验和技术)
1 对于实际开发而言,一般都会写一个数据库的访问类。(注:这个数据库访问类不是数据访问层哦,而是基本的数据访问方法)
大家都知道ADO.NET为开发认为提供了4种的提供程序,分贝是MS SQL, OLE DB...等。然而在大多数情况下许多开发人员都喜欢在只写定一种,其实这样设计的代码可复用性很地的。如下:
public staitc class DataAccess
{
private static readonly string _ConnectionString; //数据库的连接字符串
static DataAccess()
{
_ConnectionString = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;
}
public static SqlCommand CreateCommand()
{
SqlConnection connection = new SqlConnection(_ConnectionString);
return connection.CreateCommand();
}
public static DataTable ExecuteCommand(SqlCommand command)
{
DataTable table = null;
try
{
command.Connection.Open();
SqlDataReader read = command.ExecuteReader();
table.Load(read);
read.Close();
}
finally
{
command.Connection.Close();
}
return table;
}
///...下面更多的方法省略
}
这么写的化,我们不能说写错了,但是这么写,如果数据库改成MySQL或者别的什么了,那么我们就必须为新的程序再写一套程序代码。这样子程序的复用性就显得非常的低,大家要明白,ADO.NET为我们提供了一套统一的编程模型,这个时候我们可以考虑使用设计模式,借助类的三大特性来改写下以上的代码,这样子,我们的程序就更容易适应变化了,改写的代码如下:
public class DataAccess
{
private static readonly string _ConnectionString;
private static readonly string _ProviderName;
static DataAccess()
{
_ConnectionString = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;
_ProviderName = ConfigurationManager.ConnectionStrings["Config"].ProviderName;
}
public static DbCommand CreateCommand()
{
//利用抽象工厂模式来声场具体的提供程序生成工厂类
DbProviderFactory factory = DbProviderFactories.GetFactory(_ProviderName);
//利用具体的提供程序工厂生成对象生成具体的对象
DbConnection connection = factory.CreateConnection();
return connection.CreateCommand();
}
public static DataTable ExecuteCommand(DbCommand command)
{
DataTable table = null;
try
{
command.Connection.Open();
DbDataReader read = command.ExecuteReader();
table.Load(read);
read.Close();
}
finally
{
command.Connection.Close();
}
return table;
}
///...下面更多的方法省略
}
以上合理的运用设计模式,借助继承和多态来实现,这样子在以后即使数据库变了,我们只需要修改下配置文件就可以了,代码的重用能力得到的很大的提高。关于那两个工厂类,大家完全不需要自己实现了,NET中已经为我们提供了这两个类,但是想要弄清楚这两个类的实现原理,就必须明白类的继承和多态以及工厂模式,在这里。我就不具体分析了。
因为实践的关系,更详细的写法,我没有写出来,只做一个介绍,大家自己扩展。如果各位有更好的方法,希望交流,我掌握的还是蛮多和精炼的,欢迎赐教和讨论。