【问题标题】:How to apply object oriented design in this program?如何在这个程序中应用面向对象设计?
【发布时间】:2016-06-23 14:30:59
【问题描述】:

编写一个程序,该程序具有以产品类开头的多个类。还有继承产品类的计算机、软件和立体声类。笔记本电脑和台式机类继承计算机以及家庭影院和汽车音响,它们继承了 Stereo 类。 该程序应允许您输入新产品并将其保存到数据库中。根据文件中的记录数,每个产品都有一个唯一的 ID 号。在详细信息选项卡上,您可以查看文件中的每条记录,查看每个产品的详细信息,甚至可以修改记录。

我做了什么 -

在DTO包中,

public interface Product {
    public int productId();
    public String name();
    public int price();
    public String type();

    public void setName(String name);
    public void setPrice(int price);
}

然后.. 我将计算机作为抽象类来扩展 Product(I),台式机和笔记本电脑正在扩展计算机并覆盖 product(I) 的所有方法。同样,我为立体声做了。

然后,在DAO包中

public interface ProductDao {

    public boolean addProduct(Product product);
    public boolean deleteProduct(int productId);
    public boolean updateProduct(int productId);
    public void retrieveAll();
}

然后我在 ProductDaoImpl 类中实现了这些方法。我的程序运行良好。 但是我的设计呢?这是正确的吗 ? 如果没有,请给我推荐一个更好的设计。

【问题讨论】:

  • 检查这个:tutorialspoint.com/design_pattern/… 应该可以帮助您理解这一点。
  • 不确定为什么您的 retrieveAll() 方法会返回 void,但除此之外,我认为您的设计没有重大问题。您对此结构及其工作原理是否有具体问题?否则这个问题有点太宽泛了。
  • 这很简单直接,我认为stackoverflow不适合发布这样的内容,或者你有什么问题?

标签: java oop design-patterns interface abstract-class


【解决方案1】:

这样做的坏处是您需要为每个具体产品创建太多类:DTO、DAO 接口、DAO 实现。考虑到您已经实现了许多产品,现在需要对数据库访问进行更改。您将需要进行太多更改。即使使用基类,它看起来也不好。

现在最好使用 ORM,因为它是处理此类事情的标准方式。使用其他好的方法,您甚至可以在运行时轻松切换 DB 提供程序,而您的代码似乎对更改非常繁重。

【讨论】:

  • 感谢您的建议。现在,我将介绍 ORM 它是什么以及它是如何工作的。我想问你一件事,将计算机和立体类抽象化是否合适?
  • 如果它们共享一些特定于计算机的属性,最好将其放在抽象基类中。参考 SOLID 原则,这是当今架构中必备的东西
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多