gpt4 book ai didi

C# DDD 填充不可变对象(immutable对象)

转载 作者:太空狗 更新时间:2023-10-30 01:11:17 25 4
gpt4 key购买 nike

我的域程序集中有一个不可变的 Customer 类。它包含以下 GET 属性:id、firstname 和 lastname。我的持久性程序集中有一个 CustomerRepository 类。反过来,这个 CustomerRepository 类应该使用远程网络服务填充并返回一个 Customer 对象。

我的 Customer 类不包含 setter 属性,它包含一个私有(private)构造函数。原因 - 我不希望 UI 开发人员产生错误的想法 - 他不应该能够创建或更改 Customer 对象。

我的问题:如何让我的 CustomerRepository 填充我的 Customer 对象。反射?或者我应该牺牲我的设计并启用公共(public)构造函数来构造客户对象?

最佳答案

我赞成减少 API 表面并且不误导调用者的愿望,但我仍然建议添加公共(public)构造函数。事实上,没有 setter 也没有公共(public) SaveCustomer 方法应该足以清楚地表明客户是不可变的。

如果您真的不需要公共(public)构造函数,请考虑您是否真的需要单独的 域和持久性程序集:有充分的理由将相关代码拆分为两个程序集,但不应该默认位置,不应将 namespace 替换为组织代码的主要方式(Patrick Smacchia 已编写 a few great articles explaining why )。

如果将它们组合成一个程序集,则只需将构造函数设为内部即可。 (正如另一位受访者所提到的,InternalsVisibleTo 是一个可行的替代方案 - 但它实际上只是一个 hack:您的类和设计目标告诉您这些应该在一个程序集中。)

关于C# DDD 填充不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com