2016-07-10 11 views
2

ありがとう!テンプレートメソッドパターン、共通の使用関数を定義する場所

私は最近、(Rubyで)テンプレートパターンについて読んで、私のコードでは、このパターンを使用します。

私の質問は、「どこいくつかの一般的に使用される機能を置くこと」です。

は、私は以下のようTemplateRequestBody、JSONRequestBodyとXMLRequestBodyを持っていると言います。

class TemplateRequestBody 
    def pretty_format 
    raised "called abstract method: pretty_format" 
    end 
end 

class JSONRequestBody < TemplateRequestBody 
    def pretty_format 
    # pretty format JSON 
    add_new_line_to_tail(); 
    end 
end 

class XMLRequestBody < TemplateRequestBody 
    def pretty_format 
    # pretty format XML 
    escape_double_quotes(); 
    add_new_line_to_tail(); 
    end 
end 

この例では、add_new_line_to_tail()はすべての子クラスで使用されます。 escape_double_quotes()は、いくつかの子クラスによってのみ使用されます。

どこで私は、これらの二つの機能を実装する必要がありますか? TemplateRequestBodyまたは?

ありがとうございます!

+0

代わりの調達: ' "抽象メソッドと呼ばれる:pretty_format" 昇給:この情報については、' NotImplementedError.new( 'pretty_format')を上げる ' –

+0

おかげ@Ile EftimovあなたはRubyの組み込みの' NotImplementedError'を使用することができます ' を!私はこのアイデアを知っていません。私はそれを調べ、私のコードで実装します。 – mCY

+0

恥知らずなプラグイン:私はRubyとTemplate Methodパターンについてブログましたが、あなたは[こちら](https://ieftimov.com/template-method-pattern-in-ruby)それをチェックアウトすることができます:) –

答えて

1

それは常にあるとして - それが依存:)

メソッドが親クラス(TemplateRequestBody)にそれを置くことは理にかなって、サブクラス間で共有されます。メソッドがサブクラス全体で共有されない場合は、それらを配置しないでください。

メソッドがで使用される場合は、クラスのうちがあります。ミックスインがそのメソッドを保存するのに適していると思うかもしれません。また、それを親クラスに入れることはひどい考えではありません。

希望に役立ちます!

+0

ファンタスティックブログを!どうもありがとう :) – mCY

関連する問題