samedi 5 septembre 2020

Breaking the "Law of Demeter" and possible solution to this issue [duplicate]

Recently I have read about the "Law of Demeter".

Let's suppose we have:

public class Restaurant {
     private String name;
     private Address address;

    // getters and setters...
}

public class Address {
     private String city;
     private String postalCode;

     // getters and setters...
}

Let's suppose somewhere else I have:

public void myFoo(Restaurant restaurant) {
     ...
     String restaurantCity = restaurant.getAddress().getCity(); // Breaking Demetra?
     ...
}

Am I breaking the Law of Demeter?

I think so because myFoo is "touching" an object (address) which is not a class attribute.

My solution is to modify as follows:

public class Restaurant {
     private String name;
     private Address address;

     // getters and setters...

     // added
     public String getCity() {
          return this.getAddress().getCity();
     }
}

public void myFoo() {
     ...
     String restaurantCity = restaurant.getCity();
     ...
}

Is that correct?

Aucun commentaire:

Enregistrer un commentaire