只是添加到这两个答案...
我总是将我的解决方案构建到这些基本项目中:
- 前端(通常是 asp.net MVC web app),
- 具有业务流程的服务/核心,
- 具有应用程序模型 POCO 和通信接口的对象- 被所有其他项目引用,因此它们用作数据交换合约和
实现从对象返回 POCO 实例的存储库的数据
前端引用对象和服务/核心
- 服务核心引用对象和数据
- 数据引用对象
- 对象不引用任何其他对象,因为它们是领域应用程序模型
如果前端需要任何额外的 POCO,我会在前端创建它们作为视图模型,并且只看到该项目(即注册过程通常使用具有比Objects.User
实体(POCO)更多(和不同)属性的单独类型。不需要将这些类型放在Objects中。
纯数据类型也是如此。如果需要额外的属性,这些类通常继承自同一个Objects类,并添加额外的属性和方法,例如ToPoco()
准确知道如何从数据类型映射到应用程序模式类的泛型方法。
更改 DAL
因此,每当我需要更改(正如@GetArnold 指出的那样)我的数据访问代码时,我只需要提供一个使用不同库/框架的不同数据项目。所有其他特定于数据的类型等也是它的一部分......但是与其他层的所有通信都保持不变。
除了创建新的数据项目,您还可以通过更改存储库代码并在其中使用不同的 DAL 来更改现有项目。