Domanda

Ho una superclasse con due sottoclassi. Le due sottoclassi hanno entrambe un metodo per verificare se un capitolo ha contenuto. Per la sottoclasse 1 questo metodo è HasContent (int chapterID) e per la sottoclasse 2 questo è HasContent (int chapterID, int institute). Come puoi vedere la sottoclasse 2 ha un parametro aggiuntivo. Lo scopo di entrambi i metodi è lo stesso.

Stavo pensando di mettere il metodo HasContent nella superclasse. Pensi che debba farlo? In tal caso, come devo implementarlo? O è più saggio mettere entrambi i metodi nella loro sottoclasse?

EDIT:

Il corpo di HasDocuments è simile al seguente: 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;
È stato utile?

Soluzione

Modifica: aggiornato in base all'aggiornamento della domanda.

Dato che hai chiaramente quasi la stessa logica in entrambi i metodi, la riforterò in questo modo:

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);
    }
}

Altri suggerimenti

Usa l'overloading del metodo inserendo nella superclasse due metodi identici con argomenti diversi. Quando chiami HasContent, userà qualunque corrisponda al numero e al tipo di argomenti che hai fornito. Poiché si trova nella superclasse, ora non sarà necessario crearne un'altra copia se si decide in seguito di creare una nuova sottoclasse che utilizza anche questo metodo. Vedi sotto per esempio codice;

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;
}

Hai detto:

  

Lo scopo di entrambi i metodi è lo stesso

quindi sì, sembra che tu abbia un metodo comune che puoi mettere nella superclasse.

Dato che HasContent () accetta diversi incrementi, non lo sposterei nella classe base, il fatto che due metodi siano chiamati uguali, non significa che facciano la stessa cosa.

Non conosco la tua base di codice o ciò che il sistema su cui stai lavorando fa, tuttavia, date le poche informazioni che ho, alcune cose sul tuo design sembra wronge. In passato ho scoperto che spesso quando ho questo tipo di problema di progettazione, è a causa di un altro problema in cui il modo in cui i dati sono modello. Spiacenti, non puoi trovare aiuto se non puoi cambiare il resto del sistema & # 8230 ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top