Frage

Ich habe eine übergeordnete Klasse mit zwei Unterklassen. Die beiden Unterklassen haben beide ein Verfahren mit überprüft, ob ein Kapitel Inhalt hat. Für Unterklasse 1 ist diese Methode HasContent (int chapterID) und für Unterklasse 2 ist dies HasContent (int chapterID, int Institution). Wie Sie sehen können Unterklasse 2 hat einen zusätzlichen Parameter. Der Zweck beider Verfahren ist das gleiche.

Ich dachte, das Verfahren HasContent in der übergeordneten Klasse zu setzen. Glauben Sie, ich dies tun müssen? Wenn ja, wie soll ich das umsetzen? Oder ist es klug, beide Methoden zu setzen in ihren eigenen Unterklasse?

EDIT:

Der Körper HasDocuments sieht wie folgt aus: Subclass1:

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID, mInstitutionID);

if (res > 0)
    return true;
else
    return false;

Subclass2:

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID);

if (res > 0)
    return true;
else
    return false;
War es hilfreich?

Lösung

Edit:. aktualisiert entsprechend die Frage Update

Da Sie offenbar fast die gleiche Logik in beiden Verfahren, die sind, ich es so umgestalten würde:

abstract class SuperClass
{
    protected bool HasContentImpl(int chapterID, int institution)
    {
        Database db = new Database();
        int result;

        if (institution >= 0) // assuming negative numbers are out of range
            result = db.ExecuteSpRetVal(chapterID, institution);
        else
            result = db.ExecuteSpRetVal(chapterID);

        return result > 0;
    }
}

class SubClass1 : SuperClass
{
    public bool HasContent(int chapterID)
    {
        return base.HasContentImpl(chapterID, -1);
    }
}

class SubClass2 : SuperClass
{
    public bool HasContent(int chapterID, int institution)
    {
        return base.HasContentImpl(chapterID, institution);
    }
}

Andere Tipps

Verwenden Verfahren Überlastung durch zwei identisch genannten Methoden mit unterschiedlichen Argumenten in der übergeordneten Klasse platzieren. Wenn Sie HasContent anrufen, wird es verwenden, je nachdem, welche die Anzahl und Arten von Argumenten übereinstimmt Sie bereitgestellt haben. Weil es in der übergeordneten Klasse ist, werden Sie jetzt müssen nicht noch eine weitere Kopie davon machen, wenn Sie später entscheiden, eine neue Unterklasse zu machen, die auch diese Methode verwendet. Siehe unten für Beispielcode;

protected bool HasContent(int chapterID, int institution)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID, institution);

    return result > 0;
}

protected bool HasContent(int chapterID)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID);

    return result > 0;
}

Sie haben gesagt:

  

Der Zweck beider Verfahren ist das gleiche

also ja, es macht Geräusche, die Sie eine gemeinsame Methode haben, die Sie in der übergeordneten Klasse setzen.

Als HasContent () unterschiedliche Augmentationen nimmt würde ich es nicht auf die Basisklasse nach oben, die Tatsache, dass zwei Methoden, um die gleiche genannt, bedeutet nicht, sie das gleiche tun.

Ich weiß nicht, Ihren Code-Basis oder, was das System Sie arbeiten, hat jedoch angesichts der wenig Informationen, die ich habe, etwas, was über Ihr Design fühlt wronge. Ich habe in der Vergangenheit gefunden, die oft, wenn ich diese Art von Design-Problem habe, ist es aufgrund eines Problems ist sonst wo, wie die Daten-Modell. Leider Hilfe nicht überein, wenn Sie nicht den Rest des Systems ändern ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top