【问题标题】:How do i avoid, that the domain layer knows the adapters?我如何避免域层知道适配器?
【发布时间】:2020-07-30 23:05:53
【问题描述】:

假设我有一个用例(业务逻辑)、一个适配器(数据库)和一个域对象。我需要从我的域逻辑调用数据库,但问题是如何。现在的做法是为域提供适配器:(1. variant)

function usecase(adapter, domain):
     domain(adapter)

function domain(adapter):
    [some logic]...
    adapter.save_to_database()
    [more logic]...

call usecase(adapter, domain)

现在为了避免让域逻辑知道适配器,我需要返回所有数据并从用例调用适配器:(2. variant)

function usecase(adapter, domain):
     data = domain.some_logic()
     other_data = adapter.save_to_database(data)
     domain.more_logic(other_data)

call usecase()

所以,每次我使用适配器时,我都需要退出域,以便调用适配器。那是对的吗?如果,那为什么它比上面的解决方案更好?

【问题讨论】:

    标签: clean-architecture onion-architecture


    【解决方案1】:

    在您的第一个变体中,您可以从域层调用“基础设施”层。但是当你从域中调用它时,你只需要使用一个接口(@see Dependency inversion principle、API、SPI)。

    如果您想从用例(应用程序层)调用基础设施层,这是可能的。但是,当您的功能中有业务逻辑时,更喜欢第一个解决方案。

    一些规则:

    • 当您有业务逻辑时,即使您调用基础架构层,也要使用领域层。
    • 当您没有业务逻辑时,您可以从应用层调用基础架构。
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 2016-02-10
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    相关资源
    最近更新 更多