6 Stimmen

Sollte ich ein Feld oder eine Eigenschaft innerhalb der Klasse verwenden, um Werte festzulegen?

Ich geriet also in einen freundschaftlichen Streit mit einem Kollegen über ein Stück Code:

public sealed class NewObject
{
    private string _stuff = string.Empty;

    public string Stuff
    {
        get { return GetAllStuff(); }
    }

    private string GetAllStuff()
    {
        //Heavy string manipulation of _stuff
    }

    public NewObject(string stuffToStartWith)
    {
        _stuff = stuffToStartWith;
    }

    public static NewObject operator +(NewObject obj1, NewObject obj2)
    {
        if (obj1 == null)
            throw new ArgumentNullException();

        if (obj2 == null)
            throw new ArgumentNullException();

        NewObject result = new NewObject(string.Empty);
        result._stuff = String.Concat(obj1._stuff, obj2._stuff);

        return result;
    }
}

Der Streit drehte sich um die Überschreibung des Betreibers. Mein Kollege ist der Meinung, dass es nicht die beste Programmierpraxis ist, die Werte privater Felder irgendwo anders als im Konstruktor festzulegen. Die von meinem Kollegen vorgeschlagene Lösung bestand darin, den Namen des Stuff Eigenschaft zu AllStuff und fügen Sie eine Eigenschaft hinzu, Stuff die einen get UND set Accessor und verwenden Sie den neuen Stuff Eigenschaft in der Überschreibung des Operators. Damit es so aussieht:

    public static NewObject operator +(NewObject obj1, NewObject obj2)
    {
        if (obj1 == null)
            throw new ArgumentNullException();

        if (obj2 == null)
            throw new ArgumentNullException();

        NewObject result = new NewObject(string.Empty);
        result.Stuff = String.Concat(obj1.Stuff, obj2.Stuff);

        return result;
    }

Da bin ich anderer Meinung. Ich halte den ersten Weg für besser, da die Eigenschaft außerhalb der Klasse schreibgeschützt bleibt. Meine Frage ist: Welche Methode ist die beste für objektorientiertes Design?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X