描述
我的解决方案有这些项目:
- DAL =修改后的实体框架
- DTO =能够验证自己的数据传输对象
- BL =业务层服务
- WEB =演示Asp.net MVC应用程序
DAL,BL和WEB都参考了很棒的DTO.
该过程通常以这种方式执行:
- 向WEB发出Web请求
- WEB获得DTO发布
- DTO通过自定义ActionFilter自动验证
- 验证错误是自动收集的
- (验证是可以的)WEB调用BL提供DTO
- BL通过使用DTO调用DAL(可以通过它们或只是使用它们)
那么DTO验证问题......
我的DTO能够根据自己的状态(属性值)验证自己.但是现在我遇到了问题,但事实并非如此.我需要他们使用BL(以及因此DAL)进行验证.
我的现实生活中的例子:用户注册和WEB获得验证的用户DTO.有问题的部分是username验证.应根据数据存储检查其唯一性.
我该怎么做?
还有其他信息表明所有DTO都实现了IoC和TDD 的接口(即UserDTO实现IUser).两者都是DTO项目的一部分.
不可能尝试
- 我无法在DTO中引用BL,因为我将获得循环引用.
Compilation error
- 我无法创建一个额外的DTO.Val项目,它将引用部分DTO类并在那里实现它们的验证(它们引用BL + DTO).
Partial classes can't span assemblies.
可能的尝试
- 创建一个特殊的
ActionFilter,可以根据外部条件验证对象.这个将在WEB项目中创建,因此可以看到将在此处使用的DTO和BL.
- 将DTO放在BL中并将DTO接口保持为其他项目引用的实际DTO,并重构所有代码以使用接口而不是具体类.
- 不处理外部依赖验证,并让外部依赖项抛出异常 - 可能是此问题的最糟糕的解决方案
你会建议什么?