实体类是否可以返回OOAD中的其他实体实例?

时间:2013-05-03 12:55:01

标签: java oop ooad

我有两个班级:

public class Car
{
    private int id;
    private String name;
    private String vendor;

    /* ... */
}

public class Garage 
{
    private int id;
    private String name;
    private String address;

    /* get-set and others stuffs */

    public boolean addCar(Car c) {
        /*
            This will insert a car to tblCars
            but belong to this garage
        */
    }

    public List<Car> getListCar {
        /* 
            This will perform a SELECT query on tblCars
            to choose cars belong to this Garage
        */
    }
}

OOAD允许这样做吗?

2 个答案:

答案 0 :(得分:1)

允许?您认为会发生什么 - OOAD警察将您拉到一边并给您一张票?

你可以做任何你想做的事。你会发现事后是否误导了它。

您的设计看起来可以接受,但车库没有Collection<Car>

这是CarGarage之间的一对多关系。这就是通常的做法。

我认为Smalltalk MVC的想法有点过时了。以下是我查看网络应用程序图层的方法:

view-->controller-->service--+-->persistence
                             |
                             +--> model

控制器和视图紧密耦合在一起。

服务是了解DAO和模型对象的东西。它们满足用例和自己的工作单元。

答案 1 :(得分:1)

这一切都取决于您的要求。如果每次进入车库时都需要保存一辆车,那么请使用代表处理数据库插件:

public boolean addCar(Car c) {
    Delegate.getInstance().addCarToGarage(this, c);
}

public List<Car> getListCar {
    Delegate.getInstance().getAllCars();
}

否则只需将其保留为

public boolean addCar(Car c) {
    myCarList.add(c);
}

public List<Car> getListCar {
    return myCarList();
}

并将其保存在其他位置。