【问题标题】:Where to put DTOs, Result Objects etc?DTO、结果对象等放在哪里?
【发布时间】:2010-11-20 12:21:29
【问题描述】:
我有一个相当干净的 ASP.NET MVC 项目结构。但是,我正在努力解决如何组织作为 DTO(数据传输对象)的类的 mass,例如只是为了封装来自表单(视图模型)的发布数据,但不代表完整的域对象或任何接近它的东西;然后是我拥有的许多“结果”对象,它们将复杂的结果信息从我的服务层传回控制器。你把这些东西放在哪里/你如何组织它们?我现在有一个文件夹,里面有 60 多个课程,而且变得杂乱无章。欣赏建议!
【问题讨论】:
标签:
c#
asp.net-mvc
project-structuring
【解决方案1】:
域对象应该存在于单独的域模型库中。以框架中立的方式支持域模型的任何内容(例如,不引用 ASP.NET MVC、WCF、WPF 等)都属于域模型。
在域模型和特定接口框架(在您的情况下为 ASP.NET MVC)之间执行转换的类属于该特定项目(您的 ASP.NET MVC 项目)。
您可以将映射器等放在单独的 Mappers 文件夹中,但就我个人而言,我认为沿着功能而不是基础架构构建代码更有价值。
【解决方案2】:
我使用<CompanyName>.<ProjectName>.Core 来存储与我正在编写的特定项目接口不严格相关的所有项目特定类。所以 DTO、DAO 和其他项目特定的类都在里面。
我还使用<CompanyName>.<DotNetLibraryNamespace> 来存储可以跨项目重用的通用类,并且不特定于该项目域。例如,字符串操作类可以放在<CompanyName>.Text 命名空间中。我总是镜像 .net 命名空间结构名称,以便使用 .net 类库的任何人都可以轻松找到我的东西。