OO Design
RayChase
博客搬家了: https://www.raychase.net/
展开
-
贫血模型和充血模型
这两个概念是早些时候Martin Fowler总结出来的两种常见模型设计类型,没有说谁好谁不好,为不同的模型类别选择合适的场景是设计者的工作。没有工具本身的问题,只有工具使用者的问题。 贫血模型是指领域对象里只有get和set方法(POJO),所有的业务逻辑都不包含在内而是放在Business Logic层。 优点是系统的层次结构清楚,各层之间单向依赖,Client...2011-12-28 00:33:02 · 182 阅读 · 0 评论 -
观察者模式中,消息采用推和拉方式来传递的比较
观察者模式,指的是定义一种对象间的一对多的关系,当一个对象的状态发生变化的时候,所有依赖于它的对象都将得到通知并更新自己。 现在要说的分歧在这里:“推”的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新消息主动推送到各个Observer去。“拉”的方式是指,各个Observer维护各自所关心的Subject列表,自行决定在合适的时间去Subj...2012-01-06 21:12:28 · 623 阅读 · 0 评论 -
如何思考面向对象
在学习了面向对象的语言,比如Java、Python和Ruby之后,看起来每个人都觉得自己在进行面向对象的编码。但是如果你仔细审视一下代码,你就会发现还是无意识地使用了很多过程语句。 静态方法 静态方法是最天然的过程方法,它和面向对象没有一点关系。好吧,我已经听见质疑的尖叫了,那么,我就来给你解释一下为什么。首先我们可以达成一个共识,全局变量和全局状态是魔鬼。如果你觉得前面说的静态方...2012-01-31 13:06:06 · 86 阅读 · 0 评论 -
不,这样的DTO!
本文翻译自 Oh No! DTO! by Robert C. Martin,这篇文章很短,强调的内容简单得不能再简单,也许大家早就意识到,但是,我依然可以在很多产品的代码里面找到文中所说的“教条”的影子,我说不清为什么,在这里有激烈的讨论,你们说呢? 本周我在教授XP(极限编程,译注)的课程,我们要写给当前的应用写FitNesse(一种测试工具,译注)的基础测试代码。其中一位程序员使...2012-02-22 22:30:25 · 130 阅读 · 0 评论 -
画圆画方的故事
这个故事最初是来自和发哥的一次聊天,他说了一些面向对象设计方面挺有意思的事情,包括Double Dispatch(下面会提到),我根据我自己的体会和思考,把这些零散的片段重新整理成一个小故事,欢迎感兴趣的同学一起讨论。 有一个苦逼的程序员,叫做小P。 有一天,老板给他传达了这样一个需求,根据用户不同的图像绘制事件,画出一个圆或者是画出一个方块来。老板传达的图像绘制事件是这样的:...2012-02-25 22:41:36 · 251 阅读 · 0 评论 -
再议单例模式和静态类
单例模式还是静态类,这是一个老话题了,从我刚开始接触Java的时候就看到这样的讨论。在这里我总结一下,也添加一点点新东西。 首先要澄清和区别一些概念,“静态类”和“所有方法皆为静态方法的类”。 严格说来,Java中的静态类,指的是“static class”这样修饰的类定义,语法上的要求,使得这样的类一定是内部类,换言之,“静态内部类”是对它的完整定义。静态内部类最大的好处在于可以...2012-03-31 00:35:45 · 588 阅读 · 0 评论 -
对象转换的问题
有句话叫做“计算机科学领域任何问题,都可以间接的通过添加一个中间层来解决”,但是唯一解决不了的问题,是层次本身过多的问题。每一层内都会维护自己在乎的数据对象模型。层与层之间数据的传递,就不可避免地遇到对象类型转换的问题。这个话题也和最近的项目有关。我们在重构一个老旧的系统,所做的第一件事情,就是要把数据访问层从原有系统中剥离出来,我们精心设计了这一层的模型和结构,但是要让原有系统平缓地从...2012-09-29 15:56:44 · 201 阅读 · 0 评论 -
看透面向对象的复用技术
本文翻译自这篇文章,这篇文章写于1998年,作者是Scott Ambler,真的挺久远了。看看上个世纪末的时候,程序员的视角和观点。想从面向对象复用技术中真正获益,你就必须理解不同种类的复用,并且自如地在不同场合下使用它们。可复用资源业务对象根源复用性是面向对象技术带来的很棒的潜在好处之一。遗憾的是,很多情况下这个好处并不能真正兑现。原因在于复用并不是毫无代价的,它并不是...2012-10-07 15:52:17 · 299 阅读 · 0 评论