什么是将大型课程分解为模块的好ruby成语?

什么是将大型课程分解为模块的好ruby成语?,第1张

概述我有一个很大的类,有很多方法,它开始变得有点无组织,难以导航.我想将其分解模块,其中每个模块都是类和实例方法的集合.也许是这样的: 更新:我现在意识到这是一个非常糟糕的例子.您可能不希望将验证或属性移出核心类. class Large include Validations include Attributes include BusinessLogic include Call 我有一个很大的类,有很多方法,它开始变得有点无组织,难以导航.我想将其分解为模块,其中每个模块都是类和实例方法的集合.也许是这样的:

更新:我现在意识到这是一个非常糟糕的例子.您可能不希望将验证或属性移出核心类.

class Large  include ValIDations  include Attributes  include BusinessLogic  include Callbacksend

在阅读耶胡达大约Better Ruby Idioms的帖子之后,我很好奇其他人是如何解决这个问题的.这是我能想到的两种方法.

第一种方法

module Foo  module ValIDations    module ClassMethods      def bar        "bar"      end    end    module InstanceMethods      def baz        "baz"      end    end  end  class Large    extend ValIDations::ClassMethods    include ValIDations::InstanceMethods  endend

第二种方法

module Foo  module ValIDations    def self.included(base)      base.extend ClassMethods    end    module ClassMethods      def bar        "bar"      end    end    def baz      "baz"    end  end  class Base    include ValIDations  endend

我的问题是:

>有更好的方法吗?
>如何以最少的魔法为一组类/实例方法获得单行模块mixin?
>如何在没有命名空间类本身的情况下将这些模块命名为基类?
>你如何组织这些文件?

解决方法 将类分解为模块,同时诱惑(因为在Ruby中很容易),很少是正确的答案.我通常认为应该突破模块的诱惑,因为代码告诉我它希望被分成更紧密集中的类.如果你想将它分成多个文件那么大的类几乎可以保证违反单一责任原则.

编辑:详细说明为什么将代码分解为模块是一个坏主意:它让读者/维护者感到困惑.一个类应该代表一个紧密聚焦的概念.当你必须滚动数百行来查找在长类文件另一端使用的实例方法的定义时,这已经够糟糕了.当你遇到一个实例方法调用并且必须在另一个文件中寻找它时,情况会更糟.

总结

以上是内存溢出为你收集整理的什么是将大型课程分解为模块的好ruby成语?全部内容,希望文章能够帮你解决什么是将大型课程分解为模块的好ruby成语?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存