区别:ASP.NET MVC的Model、DTO、Command
最近在用CQRS架构模式做项目,有些感悟,记录下来。
问题的描述(大家是否也存在过类似的情况呢?):
从刚开始时项目中没有区分这3种对象,所以导致了很多职责公用,然后就乱了,比如Command一部分职责需要用到ASP.NET MVC中,所以定义在了底层dll中,并且贴了一堆一堆的DataAnnotation的tag到属性上,其中包括了很多remote验证、前端js validation组件的验证tag,很宏伟。后端CommandHandler那边传入DomainService的dll中,由于对数据转换还存在误解,所以也用得一塌糊涂。
我目前的理解:
- ASP.NET MVC的Model层不能少,这个是细粒度的对象,和UI有很强的联系,在这些对象定义上需要贴一堆验证tag以及UIHint
- Command对象,是牵涉到具体业务行为的对象定义,和UI没有很大关系(但不代表没有关系),Command的名称、属性的定义会根据项目的进展而变化,实际上就是看需求变动以及对业务的理解深入而变化,在Command对象上定义的都是些server端验证的属性(顺便说一下,A2D框架的CommandBus会在每次CommandBus.Send后验证这些Command的合法性)。
- DTO,是data transfer object的意思,它所能描述的范围太宽了,后来发现在CQRS中,DTO主要是指Query DTO。
下面再贴一张CQRS的图(大家看看能否把上面3种对象对应起来):
自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
商业合作请看此处:https://www.magicube.ai
心怀远大理想。
为了家庭幸福而努力。
商业合作请看此处:https://www.magicube.ai
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】