Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 谁来决定?调用方还是方法的业务逻辑?建筑风格_Java_Oop_Generics_Methods_Architecture - Fatal编程技术网

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

Java 谁来决定?调用方还是方法的业务逻辑?建筑风格,java,oop,generics,methods,architecture,Java,Oop,Generics,Methods,Architecture,昨天我讨论了一种体系结构编码风格,以及方法的调用方或方法的逻辑是否应该做出决定 现在如何(简化): 有一个类页面,其属性为列表 public class Page { private String name; private List<Hotel> hotels; } 在我看来,管理方法参数的状态不是一个好主意 如果方法是类的一部分,我们只需删除第一个参数: class Page { ... public void fillPageWithHotel

昨天我讨论了一种体系结构编码风格,以及方法的调用方或方法的逻辑是否应该做出决定

现在如何(简化):

有一个类
页面
,其属性为
列表

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

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

如果方法是类的一部分,我们只需删除第一个参数:

class Page {
    ...
    public void fillPageWithHotels(List<DummyInfo> dummyInfos){
        ...
        setHotels(hotels);
    }
}
类页面{
...
酒店公共页面(列出dummyInfos){
...
赛特酒店(酒店);
}
}
否则,它可能是一种实用方法:

class Factory {
    public static List<Hotel> createHotels(List<DummyInfo> dummyInfos){
        ...
    }
}
...
page.setHotels(Factory.createHotels(dummyInfos));
类工厂{
公共静态列表createHotels(列表dummyInfos){
...
}
}
...
page.setHotels(Factory.createHotels(dummyInfos));

如果打电话的人不能决定他需要什么类型,他就不能指定泛型。

谢谢你的回答。用另一种方法更新了我的答案。你们怎么看?正如我所说的,若这个方法的用户不能决定他需要哪个实现作为返回类型,那个么泛型是无用的。OOP的一个原则是“编程到接口而不是实现”,我之前的评论适用于您的初始目标“调用者不关心页面信息是如何设置的”。
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));