1

我有设计问题,希望能得到帮助。

假设我有一个域实体说“用户”、“机构”。

该“用户”可以注册到各种“服务”,例如“会计或图书馆”。我创建了一个“ServiceRegistration”抽象类,“User”有这些服务注册的列表。这些服务只不过是将来作为组件插入的模块。所以当我的库组件完成后,我可以插入到我的系统中。Library 组件将显示“LibraryServiceRegistration”类,该类将存储在“User”->“ServiceRegistration”列表中。“用户”不知道这个“LibraryServiceRegistration”,因此变得可扩展。库组件当前知道“用户”,因此它可以将“图书馆服务注册”信息存储在“用户”中。

但现在说我创建了一个适用于“用户”和“机构”的新组件“会计”。我的会计组件将“AccountingServiceRegistration”存储在每个用户的“用户”->“服务注册”和每个机构的“机构”->“服务注册”中。

我希望隔离“会计”组件,以便我可以将其配置为它也可以提供服务的域实体。所以目前它可以在不更改代码的情况下为“用户”和“机构”提供服务。

这可能吗?

4

1 回答 1

0

很明显,系统中的某些代码需要同时了解服务和实体。问题实际上是哪一段代码应该处理这个问题。

以下是我看到的选项:

  • 实体定义了它可以接受的服务(根据您的帖子不受欢迎)
  • 服务定义它支持哪些实体(可能)
  • 服务注册类定义了它支持的实体(这也可能很好)
  • 一个新的类(工厂?)处理匹配(如果您已经在使用工厂,可以工作)

如果您的所有域实体都实现了一个通用接口,所有这一切都会变得容易得多。

我的建议是在基础服务上使用一个抽象方法,列出它支持的实体。然后每个服务将声明它支持的实体。此外,Service 上的任何方法创建针对实体的新注册都将能够验证实体类型。

我希望这有帮助

于 2013-09-12T16:36:31.820 回答