Java可移植性建模:路由不可移植<;车站>;或路线。车站()?

Java可移植性建模:路由不可移植<;车站>;或路线。车站()?,java,collections,iterator,domain-driven-design,Java,Collections,Iterator,Domain Driven Design,在我的领域中有Route和Station类。路线描述了车辆通过顺序站和行程元数据(操作员、公交车号等)的行程 因此,路线将有一个站点列表和一些附加元数据。此列表的某些帮助器方法也有必要,例如firstStation()和lastStation(),这里我有两个选项: 在Route类中实现它们: 但对于第一个/最后一个方法,这看起来很自然: Station st = route.firstStation(); 另一个想法是创建自定义集合实现: 这种方法更加冗长,需要一些技巧才能创建JPA映射

在我的领域中有
Route
Station
类。路线描述了车辆通过顺序站和行程元数据(操作员、公交车号等)的行程

因此,路线将有一个站点列表和一些附加元数据。此列表的某些帮助器方法也有必要,例如firstStation()和lastStation(),这里我有两个选项:


在Route类中实现它们:

但对于第一个/最后一个方法,这看起来很自然:

Station st = route.firstStation();

另一个想法是创建自定义集合实现:

这种方法更加冗长,需要一些技巧才能创建JPA映射


这个问题与您的个人偏好有关,我很高兴听到您的建议和想法,您认为应该如何实现上述代码(以及为什么要实现)。

因为您的自定义方法似乎是按照我喜欢的“路线”操作的

public class Route {
    private List<Station> stations;

    public Station firstStation() {
        return stations.get(0);
    }

    public Station lastStation() {
        return stations.get(stations.size() - 1);
    }

    public Iterable<Station> getStations() {
        return stations;
    }

    private static class Station {

    }
}

由于您的自定义方法似乎在“路线”上运行,因此我会选择

public class Route {
    private List<Station> stations;

    public Station firstStation() {
        return stations.get(0);
    }

    public Station lastStation() {
        return stations.get(stations.size() - 1);
    }

    public Iterable<Station> getStations() {
        return stations;
    }

    private static class Station {

    }
}

我会说:尽可能选择组合而不是继承。我认为在这种情况下,代码的可读性要好得多……或者你可以为你的站点使用LinkedList,并使用内置的getFirst()和getLast()方法。@ppeterka所以你投票支持第1种方法,不是吗?不,不要实现Iterable。事实上,不要实现任何东西:默认情况下,Java中有一个很好的集合集合。。。按照@Nicktar的建议去做:使用LinkedList。没有必要发明另一个轮子。我不明白你为什么需要一个单独的班级。你为什么不干脆把车站还回去?除此之外,我同意,
for(Station st:route)
看起来很奇怪。我会说:尽可能选择组合而不是继承。我认为在这种情况下,代码的可读性要好得多……或者你可以为你的站点使用LinkedList,并使用内置的getFirst()和getLast()方法。@ppeterka所以你投票支持第1种方法,不是吗?不,不要实现Iterable。事实上,不要实现任何东西:默认情况下,Java中有一个很好的集合集合。。。按照@Nicktar的建议去做:使用LinkedList。没有必要发明另一个轮子。我不明白你为什么需要一个单独的班级。你为什么不干脆把车站还回去?除此之外,我同意,
for(车站st:route)
看起来很奇怪。因为设计很好,所以投票率较高。只是一个细节,让
Station
成为一个私有的内部类并返回
Iterable
@Ole V.V.是没有意义的。我创建Station作为一个内部类只是为了有一个最小的自包含的编译示例。由于设计很好,所以进行了升级。只是一个细节,让
Station
成为一个私有的内部类并返回
Iterable
@olev.V是没有意义的。我创建Station作为一个内部类只是为了有一个最小的自包含的编译示例。
public class Stations implements Iterable<Station> {
    private List<Station> stations;

    public Stations(List<Station> stations) {
        this.stations = stations;
    }

    public Station lastStation() {
        return stations.get(stations.size() - 1);
    }

    public Station firstStation() {
        return stations.get(0);
    }

    @Override
    public Iterator<Station> iterator() {
        return stations.iterator();
    }
}

public class Routte {
    private Iterable<Station> stations = new Stations();

    public Iterable<Station> stations() {
        return stations;
    }
}
for (Station st : route.stations())
public class Route {
    private List<Station> stations;

    public Station firstStation() {
        return stations.get(0);
    }

    public Station lastStation() {
        return stations.get(stations.size() - 1);
    }

    public Iterable<Station> getStations() {
        return stations;
    }

    private static class Station {

    }
}
for (Station st : route.getStations())