如何管理实现通用接口的实体?

How can I manage entities implementing a common interface?

我知道在定义 Entity 时我可以 implement 一个 interface,但我希望能够将此接口的所有实现视为它们具有共享的 table,有一个共同点Repository。为了更好地说明我的问题,这里有 两个例子:

GitHub 存储库所有者

在 GitHub 上,用户和组织都可以拥有存储库。假设有一个 User 和一个 Organization 实体。它们都实现了 RepositoryOwner 接口,该接口指定诸如 Repository 数组之类的东西作为关系。

现在看看 GitHub 的 "Trending developers" page。它平等对待 UserOrganization,就好像有一个共同的 Repository<RepositoryOwner> 可以用来获取数据。

资源共享网站

一个网站,用户可以在其中上传不同类型的资源,例如图像、视频和文档。所有这些类型都有自己的 Entity 和不同的属性,但它们都实现了 Resource 接口。在用户的个人资料页面上,有一个由该用户上传的所有资源的列表。 Repository<Resource> 会再次非常有用,资源的类型使用 typeof 确定并使用图标显示。

我假设您打算共享一个共同的 table,您希望从中派生出另外两个 table?在这种情况下,您可以定义一个接口 IRepositoryOwner 并在基本实体 RepositoryOwner 中实现它。然后将 RepositoryOwner 扩展到 OrganizationUser 个实体。

这将允许您检索 RepositoryOwners 的数组,但 repositoryOwner instanceof User 将是错误的。并且将 repositoryOwner 转换为 User 是不可能的。您会丢失派生的 class 属性。