3

Ruby の多重継承はモジュールを含めることでシミュレートされますが、(クラスではない) モジュールから直接プロパティを継承することはできません。私が思いついた解決策は、モジュールの初期化でプロパティを定義することでした (以下のコード)。以下のコード(メソッドとプロパティを継承)と比較して、複数の継承を実現するより良い方法はありますか?

module MyCustomMixin
    attr_accessor :a

    def initialize
        self.a = 1
    end

    def b
        "something"
    end
end

class MyCreateView < CreateView
    include MyCustomMixin
end

class MyReadView < ReadView
    include MyCustomMixin
end

class MyUpdateView < UpdateView
    include MyCustomMixin
end

class MyDeleteView < DeleteView
    include MyCustomMixin
end
4

1 に答える 1

1

問題は、これは技術的に実行可能ですが、(特に を使用した場合) あまりきれいに見えない少しの仕上げが必要であり、当然のこと#initializeです。コードの繰り返しを防ぐことが唯一の目的である場合、この方法でコードを記述することはお勧めしません。

したがって、次のことを考慮してください。

  • MyFooViewすべてのバージョンがある理由は何FooViewですか? ミックスインを含めるだけですか?
  • おそらく、すべてViewの には、この mixin を追加できる共通の親がありますか?
  • mixin には 以外で使用される機能が含まれていますViewか? 親に直接追加しないのはなぜViewですか?
  • ミックスインが本当にViewクラスから独立しているのなら、なぜそれ自体が単なるクラスではないので、それぞれViewがそのインスタンスを所有するのでしょうか?
于 2014-04-15T22:26:33.063 に答える