2009-03-10 28 views
4

Ich entwerfe eine Klasse ...Klassenentwurf - Eigenschaften oder Parameter?

Es gibt entscheidende Methoden, die ein Objekt benötigen, das ihnen übergeben wird, oder sie müssen ein Objekt "bekommen" können.

Also die Frage ist, sollten Sie Getter/Setter OR direkt das Objekt als Argument an die Methode senden - damit die Methode ordnungsgemäß funktioniert. Oder sollten Sie Objekte über den Konstruktor setzen, wenn sie wirklich wichtig sind, damit die Klasse korrekt funktioniert?

Antwort

5

Wenn es keinen Sinn macht, eine Instanz dieser Klasse ohne ein bestimmtes Objekt zu haben (zB macht es keinen Sinn, eine Datenzugriffsklasse ohne Verbindung zu einer Datenbank aufzubauen), dann ist es eine "Abhängigkeit" und sollte Teil des Konstruktors sein.

Wenn Ihre Klasse ohne sie überleben kann oder einen Standardwert verwenden kann, können Sie sie stattdessen zu einer Eigenschaft machen und prüfen, ob sie vor der Verwendung zugewiesen wurde.

Ich würde stark befürworten Konstruktorabhängigkeit Injektion in den meisten Fällen obwohl.

1

Wenn sie benötigt werden, um die Klasse korrekt zu betreiben, sollten Sie sie im Konstruktor benötigen oder sie darin setzen.

Zum Übergeben oder nicht. Ich bevorzuge es, wenn der Unterricht für sich selbst sorgen kann, also muss er die Arbeit machen und bekommen, was er braucht.

5

Die Frage ist nicht, wie "entscheidend" sie sind (jede Methode muss per Definition die Daten haben, die sie benötigt). Eine bessere Frage ist, wie oft sie sich ändern. Wenn sie jedes Mal anders sind, wenn die Methode aufgerufen wird (oder zumindest vernünftigerweise sein könnte), sollten sie Parameter sein. Wenn von ihnen erwartet wird, dass sie im Allgemeinen für die Lebensdauer des Objekts (oder einen signifikanten Bruchteil davon) gleich sind, sollten sie zusammen mit dem Objekt gespeichert werden.

Im letzten Fall nicht nur verlassen sich auf den Benutzer Aufruf eines Setter. Wenn sie benötigt werden, sollten sie im Konstruktor festgelegt werden, auch wenn sie von einem Setter geändert werden können.

+0

Dies ist das erste, was mir bei der Adressierung von Parameter vs Eigenschaft in js Kodierung Sinn machte. Ich denke, dass ich Eigenschaften verwende, um diese Daten (die möglicherweise jede Ausführung dieses Codes ändern (oder es ist ein SPA)) für mich verfügbar zu machen, innerhalb meines Elternobjekts. Ich bin müde von passig um Parameter, und sie sind leicht fubar'd, wenn Sie sie um Reihenfolge weise bewegen, und wenn Sie eine von ihnen verschieben/umbenennen, müssen Sie zu jeder abhängigen Funktion gehen und Anpassungen vornehmen. Ich mag diesen Teil nicht. Also, wenn ich das mit dem, was du gerade gesagt hast, kombinierst, denke ich, dass ich Eigenschaften verweise. Frage ist jetzt, wann brauche ich PARMETER? – blamb

+0

Übrigens, ich benutze noch keine Getter und Setter, ich verwalte nur meine Eigenschaften mit den Methoden, die sie herumreichen. Ist das schlecht? z.B. 'var App; (function (irShare, $, undefined) { "use strict"; app.irShare.toggleFormForFilterHasToggled = false; \t \t app.irShare.toggleFormForFilter = function() {// ein paar Sachen hier tun, dann Flagge unser Eigentum app.irShare.toggleFormForFilterHasToggled = true;} ; \t } (window.app.irShare = window.app.irShare || {}, jQuery)); ' – blamb

3

Wie Sie erwähnt haben, die folgenden drei Möglichkeiten:

Verwenden Getter/Setter

Wie Sie vielleicht wissen, get/set einen Zustand des Objekts wird, ist, dass mehrere mal abgerufen (allgemein) während der Lebensdauer des Objekts. Wenn Sie also ein Szenario wie "CrucialMethod1" bis "CrucialMethodN" verwenden, kann dieser Status verwendet werden. Zusätzlich wird dies auch dazu beitragen, den Zustand extern freizulegen.

Verwenden als Parameter

Im Allgemeinen wird ein Parameter an den Konstruktor wird ‚diktieren‘ den Zustand, in welcher das Objekt Konstruktor initialisiert. Wenn Sie also ein Szenario haben, in dem die "CrucialMethod" -Methode aufgerufen werden kann oder nicht, wäre dies nicht angemessen.

Verwendung als Parameter an die Methode

Dies würde in dem Szenario, nützlich sein, wenn die ‚CrucialMethod‘ wirkt/Transformationen (ab) auf den Parametern übergeben. Dies erleichtert den Aufruf der Methode ohne Abhängigkeit vom Zustand des Parameters.

Ihr Anruf!

Verwandte Themen