晚上值班,实在是睡不着觉,于是漫步博客园,看到了零度空间的《面向对象程序设计、结构化程序设计、分层结构、模式》,对面向对象与分层有些疑惑,涉及的问题比较简单,也谈谈自己的看法。(一夜没睡,脑筋比较乱,想到哪就写到哪了,大家包涵)。
1、因为C#是面向对象的程序设计语言,那么用C#开发的程序都是面向对象的,这句话对吗?
当然不对,面向对象不是语言,而是思想。C#是面向对象的语言,不代表你就能开发出面向对象的程序来,全用过程函数,照样能在.net底下做出面向过程的程序来。反之,C语言的书籍现在一般也在最后带几章面向对象的内容了。
所以说,是否面向对象与语言无关,与你的编程思想有关。当然不可否认一门好的面向对象语言能让你事半功倍。
2、对象包括属性和行为,没有行为能算是面对象吗?
谁说没有行为就不算对象了?!对象包含属性和行为,不是说对象一定要同时包含属性和行为,也可以仅包含属性,或仅包含行为。这个没有绝对的要求。
如上面的Card对象,有许多属性。但你说一张卡它会有什么行为呢,总不能"卡.刷(卡)吧,换成"用户.刷(卡)"还差不多。所以说一个对象有没有行为,是对象本身及项目中的实际需要决定的。
3、如果行为也写入对象中,那么势必是会将一些数据库操作,比如说DataAccess层里面的东西写进去,这样分层设计还有意义吗?
"行为也写入对象中",这句话我没看太明白。还拿上面的"用户.刷(卡)"的例子。你的意思是不是"刷"这个方法是否写在Model.Customer中呢。如果是这样,哪你这个层已经分乱了,当然没有意义了。但那是你对三层架构理解的还有偏差,不是分层设计的问题。可以看看本人的《实战剖析三层架构》一文,对此问题(Mode的地位)有比较详细的说明。
4、分层是为了什么?是为了让程序结构看起来更清晰,还是让程序开发时可以让更多的人同时进行工作,还是为了其他的一些什么?
个人认为,分层最主要的好处还是程序结构清晰,其次才是多人协同开发。
有了分层,可以让你在编程时思路更加集中。在做BLL时,可以只思考编码相关的内容,在做DAL时,考虑数据库方面的就够了,做UI也是如此。毕竟人脑不是电脑,虽然硬盘容量很大,但是内存并不高,还是单线程,能同时思考的事情还是越少效率越高。
至于分层带来的效率损失,从正面想可以参考80/20法则,从负面想的话你就结合中国国情吧,你这点资源浪费和有些事一对比就没啦。
5、设计模式是工程性的总结,在实际的软件开发中到底应该怎样去应用?
设计模式的书看几本以后也就差不多了,还是要多写代码。
首先不要想着写的每一段代码都非得对应上某个设计模式才行,顺其自然,觉得用不上就没必要用,无需强求。等到代码写得多了,发现某个部分总需要改动,或者有些代码总需要重复编写,或者你用鼠标从上往下滚屏时发现某段代码的版式看着不漂亮,那就可能是需要使用设计模式进行重构的地方了。这时参照书本去做,事半功倍,会比上去就勉强用设计模式领悟得更深。
6、被他这么一问,我还真的怀疑起自己来了
老兄不必怀疑自己,你这个项目确实是面向对象并分层的架构模式,你的同学也未必比你做的好,要对自己有信心。不过从整体上来看,思路还是有些混乱,所以说小程序还行,大程序不行也在理。这个也没什么好说的,还是经验积累到,越做会越好的。