【发布时间】:2019-12-19 19:16:36
【问题描述】:
我有一个 ViewModel,它从数据库中检索一些对象,而其他一些类观察它们并将它们放入 UI。
为了与数据库交互,我需要更多信息,所以我最终创建了两个接口,一个更通用,另一个专门用于数据库
public interface MyObject{
// Some methods ...
}
public interface MyObjectEntity extends MyObject{
public int databaseSpecificMethod();
// Some more of those ...
}
现在 ViewModel 有一个 MyObjectEntity 类型的列表,并提供插入新对象或修改现有对象的方法。
然后从 ViewModel 获取这些对象的类会将它们获取为 MyObject,我这样做是为了抽象出这些对象来自数据库的事实,这样它们就可能来自任何地方。
当 UI 类将其中一个对象发送到 ViewModel 时,它会将其发送为 MyObject
但是 ViewModel 需要将其作为 MyObjectEntity 来存储它(以防修改对象)。
我想到的一个解决方案是将给定的MyObject 与MyObjectEntity 的列表进行比较,并使用== 进行比较,因为两者实际上应该是同一个实例。 (忽略遍历列表的成本)
是否有理由认为这是一种不好的做法或将来会带来问题?
另一种解决方案可能是将这些对象公开为MyObjectEntity 并忘记所有这些,在这种情况下,我想知道您是否认为抽象实际上没有意义并且不需要。 (目前检索这些对象的唯一方法是从数据库中)
【问题讨论】:
-
你能用
instanceof来检查它是否是MyObjectEntity对象吗?见stackoverflow.com/questions/13487765/… -
@Progman 嗯...我知道
instanceof通常是一种代码味道,我宁愿避免它。但是,您让我认为我的解决方案是一种隐含的instanceof,但它并没有真正比较对象的类型,只要它是相同的实例或不是任何类型的对象 -
那么请edit 在您的问题中包含对 ViewModel 和 UI 类的详细描述、它们如何与
MyObject和MyObjectEntity接口一起使用以及您想要做什么。提供某种图表来可视化不同类的访问,并尽可能显示您拥有的源代码(类似于minimal reproducible example)。
标签: java software-design