Architecture 常见的第三方图书馆,如ONION架构中的货币

Architecture 常见的第三方图书馆,如ONION架构中的货币,architecture,Architecture,在洋葱架构中,我们有一个核心,它包括一个应用程序层作为核心的外层和一个域层作为核心的内层。此外,我们还有演示文稿,下层洋葱皮(位于核心之上的层)。 内层不应使用外层的概念,而应具有可由外层实现的接口(端口) 但是对于像Money或一些DateTime库这样的公共库,这是否意味着我需要在域层中创建一个接口并实现该接口?我的意思是,这些库就像普通的助手,在这些库之上制作适配器似乎是浪费时间。但另一方面,我明白核心应该是独立的。所以我不确定我是否可以打破规则,不为这些库创建端口/适配器,或者我应该创建

在洋葱架构中,我们有一个核心,它包括一个
应用程序
层作为核心的外层和一个
层作为核心的内层。此外,我们还有
演示文稿
下层
洋葱皮(位于核心之上的层)。 内层不应使用外层的概念,而应具有可由外层实现的接口(端口)


但是对于像Money或一些DateTime库这样的公共库,这是否意味着我需要在
层中创建一个接口并实现该接口?我的意思是,这些库就像普通的助手,在这些库之上制作适配器似乎是浪费时间。但另一方面,我明白核心应该是独立的。所以我不确定我是否可以打破规则,不为这些库创建端口/适配器,或者我应该创建它们?根据您的经验,是否有任何最佳实践或建议或想法?

我的观点是,第三方库中的类很难(也不可能)将1-1映射到您的域

您的库中的
Money
类可能具有比实际需要多得多的功能。我会诚实地在我的核心项目中创建一个包装器


请记住,目标是尽可能清晰、容易地表示领域,尽可能减少“干扰”。第三方库肯定会公开您可能从未使用过的方法和属性(也许您不希望其他人使用)。

我同意,但在我的实践中,大多数这样的库永远不会被其他库取代,例如,这个DateTime库有很棒的助手方法,这意味着您始终需要制作一个接口和适配器,并定期使用新功能(库中已经存在)进行扩展,以满足新的域需求。我同意在大多数情况下,拥有一个接口和适配器是个好主意,但对于像这样的库,我觉得我只是在浪费时间创建一个包装器,因为它的功能太普遍了。是的,可能钱不是一个好例子,我同意钱可能应该用适配器来实现。在大多数情况下,像DateTime这样的东西可以被视为基本类型。与领域相关的类,比如Money,与项目联系太紧密:)但是,不要太信任外部库!