首页 > 解决方案 > 与实体不直接相关的属性的最佳设计方法是什么?

问题描述

我想在 Java 中创建一个模拟库的迷你应用程序。我创建了一个名为Book以下属性的类:

public class Book {
    private final String ISBN;
    private String title;
    private String author;
    private String domain;
    private int numberOfPages;
}

我想再添加两个属性:stockprice。但是这些属性与真正的书(如ISBNtitle)没有直接关系,所以我不知道在哪里添加它们:在Book或另一个类中......

一个想法是创建一个名为BookView(不确定它是否是最佳名称)的新类并添加如下属性:

public class BookView {
    private Book book;
    private short stock;
    private float price;
}

另一个想法是扩展Book并创建一个BookWithDetails添加股票和价格的子类,但我不确定继承是否适合这种情况:

public BookWithDetails extends Book {
    private short stock;
    private float price;
}

对于此类情况,最好的方法是什么?

标签: javaooparchitecturecomposition

解决方案


附加属性不属于 有Book两个原因:

  • 他们描述了别的东西——而不是描述这本书,他们描述了许多以特定价格提供的书籍,并且
  • 一本书可能有多个这样的属性——理论上,你可能有五本书每本 10 美元,三本书每本 8 美元。

因此,您的BookView班级是代表一本书的好选择,除非我将其重命名:

public class BookLot {
    private Book book;
    private short stock;
    private float price;
}

还可以考虑将 to 更改priceint,并理解它代表美分或所需货币的任何值。这是因为float并且double不太擅长表示小数,并且BigDecimal对于表示微小的十进制数可能会太浪费。


推荐阅读