谁来决定?调用者还是方法的业务逻辑?建筑风格

Who should decide? The caller or the business logic of method? Architecture style

昨天我讨论了架构编码风格,以及方法的调用者或方法的逻辑是否应该决定某些事情。

目前是怎么做的(简体):

有一个 class Page 具有 List<Hotel> 作为属性。

public class Page {
    private String name;
    private List<Hotel> hotels;
}

决定在方法中包含业务逻辑,以便调用者不关心页面信息是如何设置的。

public void fillPageWithHotels(Page page, List<DummyInfo> dummyInfos){
    //business logic...
    List<Hotel> hotels = new ArrayList<>();
    for(DummyInfo di : dummyInfos){
        //create a hotel instance and fill the infos of dummy inside hotel attributes
        Hotel h = new Hotel(di.getName());
        //many other information set to hotel attributes...
        hotels.add(h);
    }
    //important part here. The List of hotels is set here to the page 
    page.setHotels(hotels);
}

第一个问题:这是一个好的设计还是方法 return 应该是 List<Hotel>?

为什么我问这个问题:

现在我有另一个扩展酒店的 class。 public class HotelDetail extends Hotel HotelDetail 现在也是 Page 对象中的一个属性。

而且我还必须调用 fillPageWithHotels 方法。但现在我需要的不是 Hotel 而是 HotelDetail 实例。

来电者无法决定他需要 Hotel 还是 HotelDetail

这个问题的最佳架构风格是什么?


编辑 1:

我的第一种方法:我不给 Page 作为方法参数,而是给一个泛型 return 类型:

public <T extends Hotel> List<T> fillPageWithHotels(Class<T> c, List<DummyInfo dummyInfos){
    //business logic...
    List<T> hotels = new ArrayList<>();
    for(DummyInfo di : dummyInfos){
        //create a hotel instance and fill the infos of dummy inside hotel attributes
        T t = c.newInstance();
        //many other information set to hotel attributes...
        hotels.add(t);
    }
    return hotels;
}

在我看来,管理方法参数的状态不是一个好主意。

如果方法是 class 的一部分,我们可以简单地删除第一个参数:

class Page {
    ...
    public void fillPageWithHotels(List<DummyInfo> dummyInfos){
        ...
        setHotels(hotels);
    }
}

否则可能是实用方法:

class Factory {
    public static List<Hotel> createHotels(List<DummyInfo> dummyInfos){
        ...
    }
}
...
page.setHotels(Factory.createHotels(dummyInfos));

如果调用者不能决定他需要什么类型,则不能指定泛型。