惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
Recent Announcements
Recent Announcements
博客园 - 叶小钗
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
C
Check Point Blog
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
P
Proofpoint News Feed
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
小众软件
小众软件
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
M
MIT News - Artificial intelligence
G
Google Developers Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
D
Docker
有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Recorded Future
Recorded Future
I
InfoQ
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
美团技术团队
Vercel News
Vercel News
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学

博客园 - 旭日东生

微软项目开发团队每个角色的一天是如何度过的【转】 如何对软件项目团队成员进行角色和岗位的划分【转】 C# 委托的妙文【转】 NHibernate初体验[转] 配置NHibernate有三种常见的配置方法[转] - 旭日东生 - 博客园 软件系统与管理工作的执行、监督问题 代码编码规则检查工具Microsoft StyleCop 4.2 [转]为什么用例不是“功能”? ms-sql递归调用 有关数据完整性的教训和转一篇文章 转《马云和爱迪生:究竟谁“欺骗了世界”》以及我的个人想法 转而告之:马云给雅虎员工作的精彩演讲:爱迪生欺骗了世界! 哈佛管理论丛:谁背上了令人讨厌的猴子 有关UP(unified process)的疑问和胡思乱想 关于《敏捷软件开发:原则、模式与实践(C#版)》 更新数据库所有表的某一个指定字段 功能自动化测试工具列表大全【转】 企业内部实现软件测试自动化的方案探讨 一些有用Transat-SQL技巧 [持续更新中]
面向对象设计的一些个人认知阶段性总结
旭日东生 · 2008-08-15 · via 博客园 - 旭日东生

我们的开发团队依然没有彻底的用好OO的开发模式,依然在用非面向对象的思想来开发出好像是面向对象的程序,也即类OO,但是没有做到彻底的OO,但是要在团队里扭转思想不是一件可以立刻做立刻出现效果的事情,但是OO的确有他的好处,那么对于OO,能够给我们带来什么好处呢?下面是我的想法,用文字表达一下,加强自己的理解,彻底的OO带来的好处就是能够比较符合人类的和现实世界的思考方式,所以当我们要去学习理解一个系统时,可以通过OO模型来比较快速建立一个初步概念,然后根据这个概念为纲一步步深入学习系统,如果严格符合OO设计模式的系统,我们可以利用UML反向工具根据代码来快速生成静态类图,从类图上了解系统中个个类之间的关系,好帮助我们进一步的学习系统中大量的代码,其实这里还隐含了另外一个问题,就是:我们在设计、实现系统中,应该是会产生一些辅助类的,这些辅助类可能跟系统的业务没有直接的关系,仅仅是我们在系统设计过程中为了达到某种目的(如松耦合、易扩展而加进去的,这些类其实也会影响我们对业务的理解,至少在刚刚接触、学习一个系统时是会有影响的,但是,如果我们的设计过程如果能够严格、而且适当的遵循面向对象的设计规则,而且明确的利用设计模式,而且学习了解系统的人又是按照这些思路去了解展开学习的,那么就可以降低阻碍性,依然能够起到引领理解的作用,所以在敏捷软件开发方法论中,不提倡过度的花时间在制作文档上,而是提倡代码既是文档,因为一个思路清晰、关系良好的设计通过最终代码反向生成的UML已经是最好的文档了,而某一些太过于细节的实现算法和逻辑在任何时候都是需要查看代码进行确认和了解的,当然面向对象能够支持良好的分层解耦也是其中的一个好处,不过我认为这种解耦并非一定要通过OO来实现了,面向过程也一样可以做到的,就像在博客园里的讨论的一样,“接口其实仅仅是大家订好的一个契约”,不用面向对象的技术也一样能够实现这个契约,用函数、方法也可以,只是如果用面向对象力量的interface和abstract class更加符合面向对象设计的原则和模式,如果参与的人都熟悉这方面的就能够增进理解和加强沟通而已,所以非面向对象并不能成为强耦合出现时的接口,嘿,其实这个问题在我刚接触OO思想的时候就困扰过我,最后才悟通了过来,所以程序设计应该有一个前提:就是我们的设计方案是为了降低理解的成本的,如果发现设计方案需要花费太多的脑汁来理解的时候就要考录一下是否已经过度设计了,当然这里的前提是:你设计的是应用系统,而不是通用的框架或者控件,框架和控件一般都必须具有通用性,所以为了低耦合、易扩展有必要加入复杂一点的设计来达到目的,另外从敏捷的开发方法论来说,提倡不要过度的猜测可能产生的变化,而是有变化的时候通过重构的方式来实现,但是:重构毕竟需要时间重写代码啊,这个问题还依然困扰我,是否可以借助一些自动化的代码生成工具呢?就像是ORM,或者codesmith等工具,我虽然没有对这些范畴有深入的了解,但是,对于设计方案改变的重构,使用ORM或者codesmith现在还是不看好,也许他们只是应对数据库结构改变方面有用处,但是对于比如加了一个适配器或者是工厂的这种设计方案改变应该还是应付不来,嘿,在公司碰到最多的是:为一个表征加以个字段并显示到变现成,这种必须贯穿真个系统分层的需求变化,有没有什么比较好的方法来处理这种简单的重复性工作呢?有待我慢慢学来

其实OO也有坏处啊,性能是个问题啊,然后团队成员的学习也是个问题啊,不过现在反而是一些年轻的程序员有这样的思路,因为现在接触到的培训、教学等都是用OO的思想教的,所以后面这个也不是太大的问题了。

也不知道自己的想法对不,反正先写下来先,如果日后有更正确的认识,也能体现出自己进步来了。