2017-12-07 1 views
1

Der folgende Code bremst anscheinend das Gesetz von Demeter, d. h. Methoden getServer().methodx(...). Von der anderen Seite sieht es ziemlich kompakt aus = besser lesbar?Ist dies eine Verletzung des Demeter-Gesetzes? vs. lesbaren Code

abstract class BaseManager { 
    ResultSet find(String searchText) { 
     return getServer().find(searchText); 
    } 

    ResultSet fetch(String fetchText) { 
     return getServer().fetch(fetchText); 
    } 

    void save(String saveText) { 
     getServer().save(saveText); 
    } 

    abstract BaseManager getServer(); 
} 

class Server1Manager extends BaseManager { 
    @Override 
    protected BaseManager getServer() { 
     return server1; 
    } 
} 

class Server2Manager extends BaseManager { 
    @Override 
    protected BaseManager getServer() { 
     return server2; 
    } 
} 

Wenn das Gesetz verletzt wird, wie sie diesen Code umgestalten? Vielen Dank im Voraus.

Antwort

1

Der folgende Code Bremsen [sic] offenbar das Gesetz des Demeter, d.h. Methoden GetServer(). Methodx (...). Von der anderen Seite sieht es hübsch aus compact = besser lesbar?

Der Punkt Ihres Designs ist auf mich verloren. Wenn Kompaktheit Ihr Ziel ist, wäre das nicht noch besser?

Zusätzlich zu noch kompakter und klarer entspricht dies dem Demeter-Gesetz. Außerdem folgt es dem Prinzip der Bevorzugung der Zusammensetzung gegenüber der Vererbung, die, wie Sie vielleicht sehen werden, vom Demeter-Gesetz begünstigt (aber nicht impliziert) wird.

Wenn das Gesetz verletzt wird, wie sie diesen Code umgestalten?

Ich mag immer noch, was ich oben vorgestellt habe.

Ist folgende Lösung akzeptabel (es nicht einen Code Vervielfältigung aussehen) ?: [...]

Wenn Sie präsentiert, dass für Code-Review zu mir, würde ich auf jeden Fall fragen was du denkst, du gewinnst dort von der Vererbung. Man könnte ein wenig darüber streiten, ob Ihr Code technisch doppelt ist, aber er ist sicherlich länger und komplexer als die Nicht-Vererbung, die ich vorgestellt habe. Und die Nicht-Vererbung-Version lässt keine Zweifel über die Code-Duplizierung aufkommen.

0

Für mich ist es viel besser, nachdem Sie 3 Methoden in Manager implementiert haben.

Sie können für beide Server 1 Datenverwaltungsmethoden verwenden.

Es gibt eine andere Regel, die ich mag: Fragen Sie nicht - sagen.

Verwandte Themen