【问题标题】:Is a entity class can return some other entity instance in OOAD? [duplicate]实体类是否可以在 OOAD 中返回一些其他实体实例? [复制]
【发布时间】:2013-04-27 21:19:42
【问题描述】:

我有两个班级:

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 允许吗?

【问题讨论】:

    标签: java oop ooad


    【解决方案1】:

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

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

    您的设计看起来可以接受,除了车库没有Collection&lt;Car&gt;

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

    我认为 Smalltalk MVC 的想法有点过时了。以下是我查看 Web 应用层的方式:

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

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

    服务是了解 DAO 和模型对象的东西。他们完成用例并拥有自己的工作单元。

    【讨论】:

    • 谢谢,我的意思是,例如,在 3 层设计模式中,表示层不应该直接调用数据访问层,而是通过控制层,所以,这些规则是否禁止一个实体调用/访问/返回给其他实体?
    • 视图不应引用控制器(在 MVC 中)。箭头应该从控制器到视图。
    • 它的目的是显示信息流,而不是依赖
    【解决方案2】:

    这一切都取决于您的要求。如果您需要在每次进入车库时保存汽车,则使用委托来处理数据库插入:

    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();
    }
    

    并在其他时间保存。

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多