我有设计问题,希望能得到帮助。
假设我有一个域名实体说“用户”,“机构”。
此“用户”可以注册到各种“服务”,例如“会计或库”。我创建了一个抽象类“ServiceRegistration”,“User”列出了这些服务注册。这些服务只是将来作为组件插入的模块。因此,当我的Library组件完成后,我可以插入我的系统。 Library组件将具有“LibraryServiceRegistration”类,该类将存储在“User” - >中。 “ServiceRegistration”列表。 “用户”不知道这个“LibraryServiceRegistration”,因此变得可扩展。库组件当前知道“用户”,因此它可以将“LibraryServiceRegistration”信息存储在“用户”中。
但现在说我创建了一个新的组件“会计”,适用于“用户”和“机构”。我的会计组件将“AccountingServiceRegistration”存储在“User” - >中。每个用户的“ServiceRegistration”和“Institution” - >每个机构的“服务注册”。
我希望隔离“Accounting”组件,以便我可以将其配置为它可以提供服务的域实体。所以目前它可以在不改变代码的情况下为“用户”和“机构”提供服务。
这可能吗?
答案 0 :(得分:0)
很明显,系统中的某些代码需要了解服务和实体。问题实际上是哪一段代码应该照顾它。
以下是我看到的选项:
如果您的所有域实体都实现了通用接口,那么所有这一切都变得容易多了。
我的建议是在基本服务上有一个抽象方法,列出它支持的实体。然后,每个服务将声明它支持的实体。此外,无论Service上的任何方法创建针对实体的新注册,都能够验证实体类型。
我希望这会有所帮助