java - 与实体不直接相关的属性的最佳设计方法是什么?
问题描述
我想在 Java 中创建一个模拟库的迷你应用程序。我创建了一个名为Book
以下属性的类:
public class Book {
private final String ISBN;
private String title;
private String author;
private String domain;
private int numberOfPages;
}
我想再添加两个属性:stock和price。但是这些属性与真正的书(如ISBN或title)没有直接关系,所以我不知道在哪里添加它们:在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;
}
对于此类情况,最好的方法是什么?
解决方案
附加属性不属于 有Book
两个原因:
- 他们描述了别的东西——而不是描述这本书,他们描述了许多以特定价格提供的书籍,并且
- 一本书可能有多个这样的属性——理论上,你可能有五本书每本 10 美元,三本书每本 8 美元。
因此,您的BookView
班级是代表一本书的好选择,除非我将其重命名:
public class BookLot {
private Book book;
private short stock;
private float price;
}
还可以考虑将 to 更改price
为int
,并理解它代表美分或所需货币的任何值。这是因为float
并且double
不太擅长表示小数,并且BigDecimal
对于表示微小的十进制数可能会太浪费。
推荐阅读
- typescript - Typescript 复杂查询格式
- c# - CORS anyorigin 是否允许安全?
- python - 如何提取每个视频的所有观看次数导致 Selenium 搜索 Youtube?
- javascript - 如何根据另一个参数更改函数参数的数量?
- oauth - 如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明
- nuget-package - 排除 NuSpec 文件中除缩小版本外的文件
- android - 颤动中的眨眼检测?
- javascript - 从子div获取父div
- php - 如何动态扩展 Angular 网站?
- jestjs - 在开玩笑测试中输入值时,form.item 似乎没有获得经过验证的类