在过去几个月我已经做过渡,从爪哇绝妙,我可以理解许多它所带来的好处:小码,关闭,制造商,拖把,最终使得框架等多种解决方案可能,便于用嘲讽的时编写测试等。

然而,我已经被"指控"通过我的同事,我的代码不是时髦够的。即,我还是宣布种类型我的参数和领域,往往使用的遗产和多态性的,而不是鸭打字等等。在我看来,在这些情况下,它不仅是动态与静态的,而且与动态面向对象的范例的种种困境。在这些情况下,我仍然倾向于选择OO。我觉得OO模式具有极大的价值,在其基本前提下,在允许你抽象,并与你的代码结构,特别是真实世界的概念。

因此,这里有特别的问题我需要帮助:

  1. 我应该申报的种类对于我的参数、领域,等等?

  2. 我应该宣布块的代码作为封闭的时候简单的方法将做什么?

  3. 当我应该使用鸭打字,而不是多形态的派遣。例如,在常规,我可以做的动物。"$行动"()或def动物;动物。行动(),而不是动物物=new狗();动物。行动().我可以看到的问题与第一个上下文中的开放关闭的原则,但任何其他原因,更喜欢OO式多?

  4. 当我应该使用的接口在常规(如果有的话)?

我确信,还有一些其他的类似的困境我没有写下来。我还认为,这些问题是有效的,不只是为了时髦,但是对于任何其他动态的语言。什么是你的意见吗?

有帮助吗?

解决方案

.1.我应该申报的种类对于我的参数、领域,等等?

我倾向于宣布类型的课程,这些课程的一部分用作一个公共API,事情,其他开发商将耗费很多的,或在哪里我想要一些额外的自动完成帮助自用浏览器.否则我def'的东西。

.2.我应该宣布块的代码作为封闭的时候简单的方法将做什么?

我使用的方法,除非这是我计划穿围绕作为一个变量。即使有的"foo.&酒吧"引用的方法操作,大多数开发者不知道关于这一点,感到困惑的时候,他们碰它。我还利用封锁时,它的一小块代码,以清楚地看到仍然存在较大的方法,而不是放在它自己的方法描述的目的。

.3.当我应该使用鸭打字,而不是多形态的派遣。例如,在常规,我可以做的动物。"$行动"()或def动物;动物。行动(),而不是动物物=new狗();动物。行动().我可以看到的问题与第一个上下文中的开放关闭的原则,但任何其他原因,更喜欢OO式多?

我只能使用的动物。"$行动"()形成的时候我需要这一水平的间接因为该方法名称的变化的基础上执行路径代码(大多数往往在沉重的元编程).我使用动物的动物=new狗();动物。行动()当我想IDE的帮助自动完成的,或这一级别的文件是有用的,用于代码的清晰度(而不是伤害的额外verboseness,可能是明显或制约).

.4.当我应该使用的接口在常规(如果有的话)?

我很少用它们。我可以看到使用他们大多是作为文件预期的领域的公共API电话,或可能作为标记的接口,以帮助区分的一个组类从另一个自元编程的观点。他们少得多的有用常规的超过他们。

其他提示

这并不总是一个受欢迎的意见,但我认为,更加明确和清楚你的代码可以,好。

我不喜欢的结构,让你猜刚才怎么...

我工作了一年,在红宝石并不喜欢它。我不是说它没有地方,它擅长的,我只是说我真的很喜欢保持干净的东西,并明确和不觉得这红宝石已作为一个目标。

有一件事我没有找出用于确定--的数量输入你做并不等于总体发展速度。这是真的,一个复杂的码基地有很多的重复代码使用于发展非常缓慢,而只是减少了你是什么类型没有消除工作重叠是无用的,输入更长,更加清晰,更加明确的代码是要通常以更快的速度(超过长度的项目)于同样的代码写在一个简洁,不那么正式语言。

如果你不相信,打字没有任何关系的发展速度,下一次你们释放一个项目计数的行代码鸿沟的人-天花费(包括调试和测试)。换句话说,有多少代码类型的一天。你会发现的结果是一个非常小的数目--实际上输入的代码是一个非常小的一部分的任何软件项目。

我认为与常规的你应该有利于最简单的做事方法,并回落在groovier功能,只有当形势要求。(喜欢当写入宏或创建multimethods在题,如果你发现自己达到这些工具很多你应该问自己。) 你的谨慎的做法似乎收到我,可能是你的同事是有点陶醉于它们的新权力。(它不会是第一次。)

的好事对于拥有一个灵活的语言喜欢时髦的就是你可以开始以谨慎的态度像你这样有利于知道你有多强有力的替代品的依靠,当你需要他们。你知道,"最简单的事情,可能工作。"

更具体地说喜欢鸭子打过接口并不困扰的类型参数看来似乎可能是一件好事,可能使它更容易供应模拟来测试。

它涉及到什么人都舒服。我喜欢用类型declerations和方法的呼吁,因为我很舒服。代码我写信必须维持通过人与出多少动态规划的经验所以我把它接近正常的代码,除非有一个很好的理由使用先进的常规特征。这听起来像你的小组应该建立的编码标准,尝试解释当具体的特点常规的一般应用。

有两种主要类型的面向对象的语言。

的语言 Simula67 家庭,比如C++、Java、有利于静态型的变量,编译器和连接器,并vtable都从方法.

的语言 一般 家庭,比如红宝石,有利于动态输入变量、解释和消息传递,而不是功能的指针表。

两者都是面向对象的,但非常不同的需要的概念对象的取向。

是的

--

没有

你意识到没有真正回答这个问题吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top