Después de un par de semanas leyendo en este foro, pensé que era hora de hacer mi primera publicación.Código completo 2ed, composición y delegación
Actualmente estoy releyendo Code Complete. Creo que es 15 años desde la última vez, y me parece que todavía no puedo escribir el código ;-)
De todos modos en la página 138 en Code Complete encontrará este ejemplo de horror de codificación. (He eliminado parte del código)
class Emplyee {
public:
FullName GetName() const;
Address GetAddress() const;
PhoneNumber GetWorkPhone() const;
...
bool IsZipCodeValid(Address address);
...
private:
...
}
Lo que Steve cree que es malo es que las funciones están poco relacionadas. O ha escrito "No hay una conexión lógica entre los empleados y las rutinas que verifican los códigos postales, números de teléfono o clasificaciones de trabajos"
Ok Estoy totalmente de acuerdo con él. Quizás algo como el siguiente ejemplo sea mejor.
class ZipCode
{
public:
bool IsValid() const;
...
}
class Address {
public:
ZipCode GetZipCode() const;
...
}
class Employee {
public:
Address GetAddress() const;
...
}
Cuando Verificando la postal es válido lo que tendría que hacer algo como esto.
employee.GetAddress().GetZipCode().IsValid();
Y eso no es bueno con respecto al Law of Demeter.
Por lo tanto, si desea eliminar dos de los tres puntos, debe usar delegación y un par de funciones de envoltura como esta.
class ZipCode
{
public:
bool IsValid();
}
class Address {
public:
ZipCode GetZipCode() const;
bool IsZipCodeValid() {return GetZipCode()->IsValid());
}
class Employee {
public:
FullName GetName() const;
Address GetAddress() const;
bool IsZipCodeValid() {return GetAddress()->IsZipCodeValid());
PhoneNumber GetWorkPhone() const;
}
employee.IsZipCodeValid();
Pero, una vez más, tiene rutinas que no tienen una conexión lógica.
Personalmente creo que los tres ejemplos en esta publicación son malos. ¿Es de alguna otra manera en la que no he pensado?
Sé que muchos programadores adoran el código completo, pero sinceramente nunca lo hice. Fue una lectura muy aburrida. – JonH
Eso depende de cuándo lo leyó. Si eres un desarrollador junior, es una buena lectura.Si eres un desarrollador experimentado, creo que las cosas escritas en el libro tienen sentido, sin ser algo extraordinario. –
@JonH Estoy de acuerdo, su mejor libro es en realidad "Desarrollo rápido", que pocas personas parecen haber leído, es genial. –