如何在c#中的abstaction层之间传递对象?

Jef*_*Pry 4 c# architecture datatable

所以,我有一个使用以下层构建的应用程序:

应用布局

截至目前,我没有使用任何Object的概念从最底层获取数据.我只是使用DataTables来获取数据.我对此不满意,因为它要求业务逻辑层知道列名等.

在我的业务逻辑层中,我有从这些DataTable加载的对象,服务层通过这些对象的集合与这些对象一起工作.

这是我的问题.如果我想让数据抽象层接受并回复对象,我该如何避免从服务层引用DAL?我已经读过对象工厂是一种方式,我也读过我可以构建对象转换函数等等.

你成功使用它的最佳方法是什么?我的最终目标是为不同的数据库服务器供应商提供可插拔的DAL.

Ada*_*rth 6

一个标准的做法,一个我经常带,是具有代表我的域对象模型的公用库:客户,订单,订单行等,在跨越所有层共享.

更好的是,不要跨层共享类型,只需共享接口并在需要实例时提供工厂.

然后你可以有一个可插拔的DAL,但是你的DAL仍然需要符合返回ICustomer的合同.

这不被要求停止参考文献,参考至少需要接口 - 如其他人评论说,其他文献,为强类型或工厂,然后可以分解出来 - 比如与IOC/DI框架.

我看待它的方式:通用模型是应用程序设计中的一个跨领域问题,不应被视为打破分层.

更新:这是对解决方案的一个非常模糊的解释,所以我坚持将其建立在上面.

更新2:现在当然要回答你的问题.直接删除对DLL的引用的标准方法是通过接口公开合同,在您的情况下是DAL方法GetCustomers,您的服务层与接口进行通信,但是通过依赖注入/ Inversion of Control框架请求DAL实例,或者更容易,一个工厂.我通常去小工具的工厂路线,它涉及另一个DLL.服务层将引用接口和工厂,DAL将引用接口,工厂将引用接口和DAL.

在此输入图像描述