Dado que los cambios en la firma de API / método público deberían ser mínimos para evitar romper los códigos de clientes que usan estos métodos, me preguntaba si la Ley de Demeter es menos aplicable a estos.
Un simple ejemplo:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
Tenga en cuenta que el método de débito pasa el objeto Transacción en lugar de solo la cantidad doble (la 'Ley de Demeter', según tengo entendido, diría que solo pase la información requerida, en este caso solo la cantidad, no el objeto Transacción ... ) La razón detrás de esto es porque el método en el futuro podría requerir algunas otras propiedades de Transacción aparte del monto. Por lo que entiendo, esto evitará romper la firma del método al agregar un nuevo parámetro en el futuro.
¿Esto lo convierte en una opción sensata entonces? ¿O me estoy perdiendo algo?
fuente
Si planeas expandir la
Account
clase en el futuro, diría que esta es una situación en la que hacer que elTransaction
objeto tenga un propósito más general sería una buena flexión de las reglas de la Ley.Por ejemplo:
Creo que me estoy desviando de la pregunta original, pero mi punto es que, si bien te puede preocupar que te estés desviando de la Ley de Deméter, las ventajas de hacerlo superan a los negativos.
fuente