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