3 回答
TA贡献1820条经验 获得超2个赞
我可以分享我在项目中实施这种模式的经验。将该项目视为分布式架构的简单CRUD应用,分为三种方案:
Project.Web(MVC 应用程序)
Project.DTO(普通 C# 类)
Project.API(Web API 应用程序)
Project.Web 包含应用程序的 UI 逻辑,并且所有 CRUD 操作都依赖于 Project.API,因为与数据库相关的操作是在 Project.API 中执行的。
现在来了 Project.DTO,它包含普通的 C# 类,用于来回传输数据。
Project.Web <---> Project.API
为了使其更具分布式,我创建了 Project.DTO 作为 Nuget 包并将其托管在 Artifactory(您可以使用 Nuget 或任何其他存储库)并使用 Nuget 包管理器使用它。这种方法的主要优点是 DTO 类始终是版本化的并且易于使用。
关于保持 View Model 和 DTO 分开的问题,我可以看到以下几点支持它:
从 API 到 Web 的数据传输,反之亦然:它可能很大而且很复杂。假设我的应用程序想要创建一个客户端并将其所有详细信息添加到数据库中,例如客户端地址、客户端通信、客户端历史记录等。在 Project.Web 中,我们可以拥有其他详细信息,例如会话相关数据、需要的 UI 特定数据不需要从 Web 传输到 API。因此,创建一个单独的 DTO 是有意义的,只传输 Web 和 API 通用的并且独立于项目的数据。
对 API 或 Web 的传入请求:假设我已经创建了一个移动应用程序并准备使用 Project.API。如果我没有创建单独的视图模型和 DTO,我应该将我的视图模型公开给客户端(移动应用程序),这是不可取的,因为它可能包含应该保密的敏感字段。
关注点分离:保持 DTO 仅用于传递数据,对于应用程序中的任何其他进程,请使用 ViewModel。保持关注点分离原则。
这些是我能想到的与您的问题相关的几点。
- 3 回答
- 0 关注
- 304 浏览
添加回答
举报