gpt4 book ai didi

Java 与 OO 设计

转载 作者:行者123 更新时间:2023-12-02 00:53:31 25 4
gpt4 key购买 nike

我正在开发一个继承的系统,该系统存在一些“OO 流行语”不赞成的设计问题,还有一些我个人不喜欢的问题。

这是一家漫画书店的库存和销售处理程序。

我有一个 Article 类,它可以是任何项目(魔术卡、玩具),还有一个继承自 Article 的 Publication 类,它代表书籍和杂志。 出版物具有作者和可选的发行号,而文章则没有。

有一个文章编辑器,它是一个用于创建和修改文章的 GUI。由于有可能加载有错误的出版物,并且不添加卷号,因此处理文章的界面是:

Article a = EntityManager.loadArticle(articleId);
ArticleEditor editor = new ArticleEditor(a);
a = e.getValue();

如果需要,允许将 a 更改为出版物。

我的一个不满是,如果使用引用,这可以更优雅地处理,或者至少在我看来是这样。我当前的版本使用将最后两行模式包装在静态版本中,但它仍然看起来很丑,因为它看起来太依赖于状态。

<小时/>

第二个问题是 Java(以及大多数“企业”语言)缺乏多重分派(dispatch):EntityManager 有一个 save() 方法,为 Article 重载和出版物。如果我说,这会导致一个巨大的问题,例如:

Article a = EntityManager.loadArticle(articleId);
ArticleEditor editor = new ArticleEditor(a);
a = e.getValue();
EntityManager.save(a);

目前可以通过让 ArticleEditor 保存更改来“解决”这个问题(这似乎是错误的)。

我确信必须有某种方法来调整设计来消除这些问题。 (如果需要的话,我不介意整个重写。)

如何调整设计来消除这些问题?

编辑:出版物也有作者,而不仅仅是数字。

最佳答案

我不知道您想要如何彻底地重构这个系统,但我怀疑为什么您会有一个单独的 Publication 类,仅仅因为它是一篇具有出版号的文章。特别是当您提到有时需要将文章更改为出版物时。您可以允许文章具有“出版物号”属性,如果文章不是出版物,则该属性可以为 null。这消除了将文章更改为发布的需要(只需将属性设置为非空值),并且也使您的 EntityManager 问题消失。

当然,很可能还有其他原因需要单独的 Publication 类,我只是说说我在这里看到的内容。

关于Java 与 OO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com