私はレールのソースコードを読んでいますが、クラスを直接使用する代わりに、サブクラスを作成しています。例コード:Railsソースコード - なぜクラス内のクラスをラッピングするのですか?
私の質問は..なぜサブクラスを使用する必要がありますか?どうしてクラス/構造体を直接使うのではないのですか?
ありがとうございました。
更新:
class << self # :nodoc:
attr_accessor :active
end
def self.inherited(other) # :nodoc:
super
other.active = Concurrent::Hash.new
end
ので、クラスを拡張し、誰でも、新しいConcurrent::Hash
で定義されたactive
属性を持っているでしょう:私はActiveSupport::Executor
がinherited
methdodを定義してからだと、第二の例の理由を考え出しました。
しかし、なぜStruct
を拡張する必要があるのかまだよく分かりません。
しかし、Struct.newは必要なメソッドを定義するブロックを取り込むことができます。そのように使うのはどうしてですか?ドキュメント:https://ruby-doc.org/core-2.3.1/Struct.html – songyy
できます。しかし、 'before'メソッドが必要になるたびに、このコードブロックを' new'に渡す必要があります。あなたのプロジェクトのさまざまな部分で 'before 'が必要な場合はどうなりますか?あなたは何をしますか?初期化をコピーしてブロックに貼り付けますか?確かに!問題ない! ...しかし、何かが将来変更される場合、例えば:あなたは 'Struct.new'にもう一つのパラメータを追加する必要があります。これで、プロジェクトのすべての部分でコードを変更する必要があります。そのため、機能やリファクタを拡張するために必要な時間が増えました。 – sig
これは、特定のクラスが便利な理由です。すべての変更は1か所で行うことができます。自分自身を繰り返さないでください。[DRY](https://en.wikipedia.org/wiki/Don't_repeat_yourself) – sig