Nach ein paar Wochen in diesem Forum zu lesen, dachte ich, es war Zeit für mich, meinen ersten Beitrag zu machen.Code Complete 2ed, Zusammensetzung und Delegation
Ich lese gerade Code Complete. Ich denke es sind 15 Jahre seit dem letzten Mal, und ich finde, dass ich immer noch keinen Code schreiben kann ;-)
Wie auch immer auf Seite 138 in Code Complete findest du dieses Coding Horror Beispiel. (Ich habe einen Teil des Codes entfernt)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid(Address address);
...
private:
...
}
Was Steve denkt schlecht ist, dass die Funktionen lose verwandt sind. Oder hat er geschrieben: "Es gibt keine logische Verbindung zwischen Mitarbeitern und Routinen, die Postleitzahlen, Telefonnummern oder Berufsklassifikationen überprüfen"
Ok, ich stimme ihm vollkommen zu. Vielleicht ist etwas wie das folgende Beispiel besser.
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
Wenn Sie überprüfen, ob die Zip-Datei gültig ist, müssten Sie so etwas tun.
employee.GetAddress().GetZipCode().IsValid();
Und das ist nicht gut in Bezug auf die Law of Demeter.
Wenn Sie also zwei der drei Punkte entfernen möchten, müssen Sie Delegation und ein paar Wrapper-Funktionen wie folgt verwenden.
Aber dann wieder haben Sie Routinen, die keine logische Verbindung hat.
Ich persönlich denke, dass alle drei Beispiele in diesem Beitrag schlecht sind. Ist es eine andere Art, über die ich nicht nachgedacht habe?
Ich kenne viele Programmierer lieben Code abgeschlossen, aber ehrlich gesagt habe ich nie getan. Es war eine sehr langweilige Lektüre. – JonH
Das hängt davon ab, wann Sie es lesen. Wenn Sie ein Junior-Entwickler sind, ist es eine gute Lektüre.Wenn Sie ein erfahrener Entwickler sind, denke ich, dass die Dinge, die im Buch geschrieben sind, nur Sinn ergeben, ohne etwas Außergewöhnliches zu sein. –
@JonH Ich stimme zu - sein bestes Buch ist eigentlich "Rapid Development", was nur wenige Leute gelesen zu haben scheinen - es ist großartig. –