【问题标题】:MongoDB and Spring Data - Is polymorphism a good idea?MongoDB 和 Spring Data - 多态性是个好主意吗?
【发布时间】:2019-11-19 03:48:56
【问题描述】:
假设我有三种类型的文档,它们的不同之处在于某些字段。假设:
- 对于A型:我们有
field1 和 field2
- 对于 B 类:我们只有
field1 但没有 field2
- 对于 C 类:我们有
field3
所有其他字段都相同。使用从基类继承的三个类来表示数据是个好主意吗?
【问题讨论】:
标签:
mongodb
spring-boot
database-design
spring-data
spring-data-mongodb
【解决方案1】:
提醒一下:
继承有两个方面:code reusing and overriding.
第一个解决了重复问题(看起来像您的想法),而第二个定义了相同概念的不同行为实现。
当然,在某些情况下,您可能会受益于双方。
关于你的问题:
使用三个类来表示数据是个好主意吗
从基类继承?
如果 A、B 和 C 被设计为仅保存数据(因此内部没有逻辑/行为)分解基类中的公共字段(即除字段 1、字段 2 和字段 3 之外的所有字段)说得通。它会让你免于重复,而重复是一种难闻的气味。
另一方面,如果 A、B 和 C 也有逻辑,则只有当这些类代表相同的一般概念时,才应引入基类。否则,您的抽象是错误的,并且可能导致我们尝试统一(通过基类)操作实际上是不同概念的事物的混乱用法。