Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过实现与基础设施相关的接口污染域类型_C#_.net_Dns_Aop - Fatal编程技术网

C# 通过实现与基础设施相关的接口污染域类型

C# 通过实现与基础设施相关的接口污染域类型,c#,.net,dns,aop,C#,.net,Dns,Aop,做了大约30分钟的搜索,找到了很多相关信息,但没有一个能解决这个问题,希望我没有重复一个常见的问题 我想知道关于在域类型中实现基础设施相关接口的一般共识是什么。我所读到的关于DDD的所有内容都让我相信这是应该避免的,因为这可以理解地有损于模型的简洁性 然而,我还不确定如何解决这个问题。具体来说,我有一个域类型,可以在我的表示层中使用,除了我想在需要它实现IComparable的控件中显示它的实例之外。我宁愿不要用这个接口的实现来“污染”我的类型 我认为(也许是天真的)我的选择是: 使用数据传输对

做了大约30分钟的搜索,找到了很多相关信息,但没有一个能解决这个问题,希望我没有重复一个常见的问题

我想知道关于在域类型中实现基础设施相关接口的一般共识是什么。我所读到的关于DDD的所有内容都让我相信这是应该避免的,因为这可以理解地有损于模型的简洁性

然而,我还不确定如何解决这个问题。具体来说,我有一个域类型,可以在我的表示层中使用,除了我想在需要它实现IComparable的控件中显示它的实例之外。我宁愿不要用这个接口的实现来“污染”我的类型

我认为(也许是天真的)我的选择是:

  • 使用数据传输对象(DTO),让它实现接口,并在my中使用该接口的实例 表示层
  • 我模模糊糊地 熟悉计算机的基本原理 AOP-也许有一个合适的 这个领域的技术
  • 或许 与选项2相关-代码“编织”? 我不知道为什么/什么时候去 想想看,但我是不是撞到了 现在反对吗
  • 咬紧牙关, 并实现代码位 履行合同所需的时间
  • 我有一些巫术 从没听说过
  • 如果有人想推荐2、3或5,你能告诉我一些阅读材料的方向吗?这些材料可能会帮助我开始学习

    Thx提前

  • 这会管用的,应该没问题
  • 2-4。这些都是相同的选择。区别在于如何实现代码以满足合同。代码编织和AOP仍然在“污染”您的对象,但它们正在以半自动的方式为您完成这项工作(即:您只需在对象上添加一个属性,然后在编译后实现它)。不过,无论是实现对象还是使用AOP/code gen,最终结果都是相同的

  • 我的建议如下:
  • 大多数情况下,任何需要
    IComparable
    的内容都会提供传递
    icomparaler
    的选项。如果您的控件执行了,这将允许您实现数据对象外部的比较逻辑,并将其传入。我将首先对此进行调查

    否则,我的建议是直接在对象中实现
    IComparable
    。如果不想“污染”API,只需显式实现它。

    实现一个中间的“视图模型”类:

    • 视图部分知道如何与用户界面对话(数据绑定、IComparable等)
    • 它保存对模型(域)对象的引用
    • 它公开模型对象的属性(并在必要时传递更改通知)

    感谢大家的帮助,在仔细考虑了我的所有选项(包括提供的其他选项)后,我认为我最高兴使用模型类的ViewModel变体。我认为,明智的做法是让一个类型的唯一责任是“直观地表示”一个模型类型。如前所述,它的可视化职责可能(而且很可能会)超出我目前实现接口的要求;我还在常规WinForms应用程序中使用了此模型,以确保在影响视图之前,将模型更改编组到主GUI线程(尽管还有其他解决方案)