7

如何授予对 DDD 中用户配置设置的访问权限?

我们有一个配置数据库,它将项目存储为一堆键值对。这似乎并不真正适合存储库模式,那么如何使用户能够访问这些配置值?

理想情况下,我希望为不同的配置分组设置单独的类,即.. BillingSettings、ReportSettings、TaxSettings。

为每一个都提供一个单独的存储库似乎很奇怪,但我也想保持对这些设置类的持久性无知。

在 DDD 中启用对配置的访问的正确方法是什么?

4

2 回答 2

1

我通常做的只是使用接口抽象配置,例如IBillingConfiguration,IReportConfiguration等。然后这些实现就是传递给相关方法(或注入相关对象)的内容。

价值观从何而来真的不重要。有时我在将值存储在数据库中时确实使用存储库,然后我会有类似IConfigurationPropertyRepository. 这有点尴尬,因为 aConfiruationProperty在 Entity 世界中并不像一等公民,但它似乎确实完成了工作。

我会返回一些 a 的实现,它只从底层集合或对象IBillingConfiguration中获取所需的属性。ConfigurationProperty

每个相关的GetSave方法都I{Some}Configuration将在 上实现,ConfigurationPropertyRepository因此我只获取/保存需要应用的属性子集。

于 2013-07-01T04:48:22.183 回答
0

BillingSettings 真的是域模型中的聚合(甚至是域对象)吗?如果没有,它不应该有相应的存储库。

大多数配置都是特定于基础架构的,例如 jdbc url、密码等。您不必以 DDD 的方式处理它们。如果设置存储在数据库中并且允许用户在运行时修改,我们可能需要 ConfigurationService 支持 CRUD 操作。但是 ConfigurationService 不属于域和这个排序的有界上下文,它只是一个基础设施服务。我们不必以 DDD 的方式开发它。

@Kristof Jozsa 的评论更新。

这些设置用于支持域概念。领域概念是抽象的,如何访问设置是一个实现细节。

class ExpirationSpecification {
    private int days
    //other settings?         

    public ExpirationSpecification(int days) {...}

    public boolean isSatisfied(Order order) {...}
}

public class ExpirationServiceImpl implements ExpirationService {
    //private int days;//inject using placeholder in spring
    private ConfigurationService configService;//if settings are stored in database

    ExpirationSpecification spec() {
        //return new ExpirationSpecification(days);
        return new ExpirationSpecification(configService.orderExpirationDays());
    }

    void cancel(Order order) {...}
}
于 2013-07-09T15:24:19.233 回答