加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:51:20 所属栏目:百科 来源:网络整理
导读:我有一个很大的类,有很多方法,它开始变得有点无组织,难以导航.我想将其分解为模块,其中每个模块都是类和实例方法的集合.也许是这样的: 更新:我现在意识到这是一个非常糟糕的例子.您可能不希望将验证或属性移出核心类. class Large include Validations inc
我有一个很大的类,有很多方法,它开始变得有点无组织,难以导航.我想将其分解为模块,其中每个模块都是类和实例方法的集合.也许是这样的:

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

class Large
  include Validations
  include Attributes
  include BusinessLogic
  include Callbacks
end

在阅读耶胡达大约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
  end
end

第二种方法

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
  end
end

我的问题是:

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读