Ruby on rails Ruby真的有设计模式可以解决的设计问题吗?

Ruby on rails Ruby真的有设计模式可以解决的设计问题吗?,ruby-on-rails,ruby,design-patterns,Ruby On Rails,Ruby,Design Patterns,我最近开始深入研究设计模式。一般来说,我认为大多数设计模式解决的设计问题通常不会出现在Ruby中。大多数设计问题都是因为数据类型(没有动态类型,数组一次可以保存属于同一类的对象等等)。作为一名ruby和RubyonRails的开发人员,我意识到没有接口、抽象类、引用、指针等概念,没有模块、动态类型、数组等概念,没有任何类的对象,没有eval等特性,开发人员的生活真的会更轻松。我也通过了。然而,我认为这本书试图模拟设计模式,而不是实际实现它们,原因是,Ruby中通常不会出现设计问题。是不是Ruby

我最近开始深入研究设计模式。一般来说,我认为大多数设计模式解决的设计问题通常不会出现在Ruby中。大多数设计问题都是因为数据类型(没有动态类型,数组一次可以保存属于同一类的对象等等)。作为一名ruby和RubyonRails的开发人员,我意识到没有接口、抽象类、引用、指针等概念,没有模块、动态类型、数组等概念,没有任何类的对象,没有eval等特性,开发人员的生活真的会更轻松。我也通过了。然而,我认为这本书试图模拟设计模式,而不是实际实现它们,原因是,Ruby中通常不会出现设计问题。是不是Ruby编程语言随着时间的推移而不断发展,并在内部处理设计问题,使开发人员更专注于业务逻辑


我想知道其他Ruby开发人员对此的看法。谢谢。

我想你误解了设计模式。事实并非如此

“大多数设计问题都是因为 数据类型的定义。”

相反,设计模式通常解决面向对象设计的结构问题。例如,在Ruby中,您可能会遇到这样的问题,即必须使用同一代码处理不同类的对象。当它们有不同的接口(这意味着不同的方法集)时,您可能需要适配器模式来解决这种不兼容性。同样,您可能希望实现不同的行为集,并将使用策略模式来实现这一点

一些模式,比如Null对象,可能不相关,因为它们直接集成到语言中,并且出于习惯而使用,而没有将它们看作模式


一般来说,设计模式适用于Ruby以及其他面向对象的语言。

Ruby是一种相对现代的语言,尽管不像它出现了大约十年那样现代。正因为如此,许多常见的编程模式被设计成了语言本身

在许多地方,有人声称设计模式的使用,特别是像VisitorPattern这样复杂的设计模式,实际上表明所使用的语言不够强大


考虑到和RubyonRails的核心,您选择了一个糟糕的例子来证明这一点。

设计模式只是一组关于如何解决一些常见特定问题的“想法”。其中一些是有用的。。。如果需要遵循与大多数“设计模式”中所述程度相当的预定义工作流,则其中一些工作流通常是琐碎的,甚至是相反的(查找反模式:),这意味着以下一项或两项:

  • 使用的语言being是有缺陷的,因此常见问题的解决很困难,需要遵循严格的预定义思维方式(设计模式或反模式),以避免出现过多的bug和/或根本无法解决问题。由于选择了表达能力差的语言而使用设计/反模式通常会导致胡说八道

  • 遵循设计模式或反模式的程序员缺乏理解、分析和/或解决问题的技能、知识、创造力或简单的智商,因此他/她选择遵循模式或反模式。由于知识不足而遵循反/模式,而不是在尝试解决方案之前获得该知识,通常会导致胡说八道


  • ruby语言极具表现力,因此解决常见任务,尤其是“设计模式”中概述的任务,通常不需要明确使用或遵循严格的预定义工作流。设计模式

    。当然,常见的问题因语言和系统而异。Ruby确实可以解决其他语言中出现的一些问题,但它本身也会有一些常见的问题

    你说得对。但我已经说了大部分的模式。我在使用most这个词时很小心,因为确实存在一些真正发生的问题。我的意思是,与其他java语言、C语言、甚至C++相比,露比在设法处理设计模式结构中的抽象类和接口时,设法避免了一些问题,如何将结构映射到Ruby组件和特性是我想知道的。因为,默认情况下,抽象类和接口在Ruby中并不真正存在。没错,在缺乏这些特性的语言中实现设计模式是比较困难的。例如,您不能在策略类中强制实现特定方法集。您必须使用注释和文档来定义这些接口,才能使此模式正常工作。那么,这是一个特性还是一个缺点呢?:)一旦你开始使用Ruby,这绝不是什么问题……谢谢Robert,那么说Ruby比其他语言有优势,你确实需要显式地实现Ruby中不需要的特定模式,这公平吗?此外,当使用Ruby进行设计时,问题可能会出现在哪里?Ruby在编程过程中为您提供了优势,但是Ruby的运行时性能不如它的许多竞争对手,因此您需要在运行时付费。正如他们所说,没有免费的模式午餐,正如Sean McSomething所说,仍然缺少一些东西,其中一些是RoR的一部分,另一些则不是,甚至还有一些可能无法轻松完成,因为模式与Ruby固有的模式相冲突。现在想不出一个,但我确信它就在那里。并发模式,我们开始了。Ruby的并发(线程)模型在比较