假设我有一个需要调用客户端(定义为接口、端口)的用例。
我想对该端口使用一个或另一个实现(适配器);选择使用哪一个取决于业务逻辑--例如,用户的国家,或者更复杂的计算。
在设计模式方面,那种感觉就像工厂的味道;我只需要输入一个函数来返回接口,并且它的逻辑会根据特定的条件返回不同的实现。
但是,我很难将它与我的架构知识以及什么是域和不是域的知识集成在一起:
如果我创建一个域函数在一个适配器或另一个适配器之间进行选择,则需要将适配器(非域代码)导入到我的域中,以便返回正确的适配器。这是错误的,因为我让实现成为业务逻辑的一部分。
另一方面,我可以有一个“适配器适配器”:我通过端口“泄漏”了选择适配器所需的数据,作为协议的一部分,我只有一个“包装器适配器”,用于该端口,它将调用重定向到任何可能的第三个适配器之一。这也是错误的,因为我在域中有业务逻辑(如何选择一个适配器或另一个适配器),以及适配器调用其他适配器(?)。。
我该如何解决这个问题?还有第三种选择我看不到吗?
发布于 2022-08-22 15:38:52
如果适配器实现的接口(业务逻辑)提供了工厂决定使用哪个实现所需的信息,那么工厂也可以是业务逻辑。
在您的示例中,接口可以提供一个API,提供可以用于实现的国家。
https://stackoverflow.com/questions/73313672
复制相似问题