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

时间:2017-10-30 11:44:00

标签: typeorm

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

GitHub存储库所有者

在GitHub上,用户和组织都可以拥有存储库。我们假设有一个User和一个Organization实体。它们都实现了RepositoryOwner接口,它将类似Repository数组的内容指定为关系。

现在来看看GitHub的"Trending developers" page。它会同等地处理UserOrganization,就像有一个可用于获取数据的公共Repository<RepositoryOwner>一样。

资源共享网站

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

1 个答案:

答案 0 :(得分:2)

我假设您打算共享一个公共表,您希望从中获得另外两个表?在这种情况下,您可以定义接口IRepositoryOwner并在基本实体RepositoryOwner中实现它。然后将RepositoryOwner扩展为OrganizationUser个实体。

这将允许您检索RepositoryOwners的数组,但repositoryOwner instanceof User将为false。将repositoryOwner投射到User是不可能的。您将缺少派生类属性。