Недавно я прочитал о Законе Деметры.
Предположим, у нас есть:
public class Restaurant {
private String name;
private Address address;
// getters and setters...
}
public class Address {
private String city;
private String postalCode;
// getters and setters...
}
Предположим, что где-то еще у меня есть:
public void myFoo(Restaurant restaurant) {
...
String restaurantCity = restaurant.getAddress().getCity(); // Breaking Demetra?
...
}
Нарушаю ли я закон Деметры?
Я так думаю, потому что myFoo касается объекта (address
), который не является атрибутом класса.
Мое решение состоит в том, чтобы изменить следующим образом:
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();
...
}
Это правильно?
restaurant.getAddress().getCity()
может следовать Закону Деметры, в зависимости от того, как его интерпретировать. Есть несколько точек зрения. - person NomadMaker   schedule 05.09.2020