如何管理实现通用接口的实体?
How can I manage entities implementing a common interface?
我知道在定义 Entity
时我可以 implement
一个 interface,但我希望能够将此接口的所有实现视为它们具有共享的 table,有一个共同点Repository
。为了更好地说明我的问题,这里有 两个例子:
GitHub 存储库所有者
在 GitHub 上,用户和组织都可以拥有存储库。假设有一个 User
和一个 Organization
实体。它们都实现了 RepositoryOwner
接口,该接口指定诸如 Repository
数组之类的东西作为关系。
现在看看 GitHub 的 "Trending developers" page。它平等对待 User
和 Organization
,就好像有一个共同的 Repository<RepositoryOwner>
可以用来获取数据。
资源共享网站
一个网站,用户可以在其中上传不同类型的资源,例如图像、视频和文档。所有这些类型都有自己的 Entity
和不同的属性,但它们都实现了 Resource
接口。在用户的个人资料页面上,有一个由该用户上传的所有资源的列表。 Repository<Resource>
会再次非常有用,资源的类型使用 typeof
确定并使用图标显示。
我假设您打算共享一个共同的 table,您希望从中派生出另外两个 table?在这种情况下,您可以定义一个接口 IRepositoryOwner
并在基本实体 RepositoryOwner
中实现它。然后将 RepositoryOwner
扩展到 Organization
和 User
个实体。
这将允许您检索 RepositoryOwners
的数组,但 repositoryOwner instanceof User
将是错误的。并且将 repositoryOwner
转换为 User
是不可能的。您会丢失派生的 class 属性。
我知道在定义 Entity
时我可以 implement
一个 interface,但我希望能够将此接口的所有实现视为它们具有共享的 table,有一个共同点Repository
。为了更好地说明我的问题,这里有 两个例子:
GitHub 存储库所有者
在 GitHub 上,用户和组织都可以拥有存储库。假设有一个 User
和一个 Organization
实体。它们都实现了 RepositoryOwner
接口,该接口指定诸如 Repository
数组之类的东西作为关系。
现在看看 GitHub 的 "Trending developers" page。它平等对待 User
和 Organization
,就好像有一个共同的 Repository<RepositoryOwner>
可以用来获取数据。
资源共享网站
一个网站,用户可以在其中上传不同类型的资源,例如图像、视频和文档。所有这些类型都有自己的 Entity
和不同的属性,但它们都实现了 Resource
接口。在用户的个人资料页面上,有一个由该用户上传的所有资源的列表。 Repository<Resource>
会再次非常有用,资源的类型使用 typeof
确定并使用图标显示。
我假设您打算共享一个共同的 table,您希望从中派生出另外两个 table?在这种情况下,您可以定义一个接口 IRepositoryOwner
并在基本实体 RepositoryOwner
中实现它。然后将 RepositoryOwner
扩展到 Organization
和 User
个实体。
这将允许您检索 RepositoryOwners
的数组,但 repositoryOwner instanceof User
将是错误的。并且将 repositoryOwner
转换为 User
是不可能的。您会丢失派生的 class 属性。