|
|
1
18
即使“DTO”的规范用例更像是“可以通过线路传递的可序列化对象”,在这种情况下,你实际上更多地指的是“表示传输对象”或“视图模型”。 通常,对于我们的项目来说,这些代码所在的位置就是将DDD域模型映射到PTO类的“翻译”代码所在的地方。如果这是在Prensenation层(也许不是一个很好的答案),那么pres.层就是我声明PTO的地方。但通常情况下,是“服务”为您进行翻译,这意味着“服务”和“表示”层都需要引用PTO,这(通常)会导致它们在单独的、中立的项目/程序集/命名空间/表示层和服务层都可以引用的任何内容中声明。 |
|
|
2
4
您是否使用实际的服务(web或WCF)?如果是这样,请在服务层中定义DTO,并且在添加服务(或使用旧ASMX的web)引用时创建的代理将包含所有DTO类型。这是最简单的方法,并且只保持ASP之间的松耦合。NET项目和您的服务项目——两个方向都不需要直接的项目引用。当您更新DTO时,您需要做的就是更新您的服务引用,它将通过生成的代理类自动向您的web项目公开更新。 无论如何,如果你遵循DDD方法,最好让你的基础设施项目(如特定于web平台的UI)引用你的域对象,反之亦然。然而,如果你遵循我上面的建议,你的网络项目根本不会直接依赖于这个项目,这是一件好事,当然比让你的富域对象依赖于你的web项目要好(如果这是一个考虑因素的话——我意识到你并没有说你在做这件事)。 如果你的DTO是特定于视图的,那么我会将它们包含在你的UI项目中。控制器的工作应该是确保视图只从模型中获得它需要的东西——在你的例子中,是一个只包含视图所需字段的值对象。 |