2016-07-10 11 views
2

Vielen Dank für Ihre Zeit!Vorlage Methode Muster, wo gemeinsame verwendete Funktionen zu definieren

Ich habe vor kurzem über Vorlagenmuster (in Ruby) gelesen und möchte dieses Muster in meinen Codes verwenden.

Meine Frage ist "wo einige häufig verwendete Funktionen zu stellen".

Angenommen, ich habe TemplateRequestBody, JSONRequestBody und XMLRequestBody wie folgt.

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 

In diesem Beispiel add_new_line_to_tail() würde von allen untergeordneten Klassen verwendet werden; escape_double_quotes() würde nur von einigen der untergeordneten Klassen verwendet werden.

Wo sollte ich diese beiden Funktionen implementieren? In TemplateRequestBody oder?

Danke!

+0

Statt erhöhen: 'raise "genannt abstrakte Methode: pretty_format"' Sie Rubys eingebaute in 'NotImplementedError' verwenden können:' erhöhen NotImplementedError.new ('pretty_format') ' –

+0

Dank @Ile Eftimov für diese Informationen! Ich kenne diese Idee nicht vorher. Ich werde das untersuchen und in meinen Codes implementieren. – mCY

+0

Shameless Stecker: Ich habe über Ruby und Template-Methode-Muster gebloggt, können Sie es [hier] (https://ieftimov.com/template-method-pattern-in-ruby) überprüfen :) –

Antwort

1

Wie es immer ist - es hängt :)

Wenn eine Methode in Unterklassen geteilt wird, ist es in der übergeordneten Klasse setzen (TemplateRequestBody) würde Sinn machen. Wenn die Methoden nicht über die Unterklassen verteilt werden, sollten Sie sie nicht einfügen.

Wenn Methode von einige der Klassen verwendet wird, könnten Sie vielleicht denken, wenn ein Mixin ein guter Ort wäre, um diese Methode zu speichern? Außerdem ist es keine schreckliche Idee, es in die Elternklasse zu legen.

Hoffe, dass hilft!

+0

Fantastische Blog! Danke vielmals :) – mCY