DAL/BLL 和客户端/服务器:客户端应该使用 BLL 还是 DAL 对象进行演示?或者可能是另一层(数据传输对象?)

Posted

技术标签:

【中文标题】DAL/BLL 和客户端/服务器:客户端应该使用 BLL 还是 DAL 对象进行演示?或者可能是另一层(数据传输对象?)【英文标题】:DAL/BLL and Client/Server: Should the client use BLL or DAL objects for presentation? Or maybe another layer (data transfer object?) 【发布时间】:2011-04-10 09:06:50 【问题描述】:

我正在编写一个客户端/服务器系统。服务器采用 DAL/BLL 设计。客户端负责呈现数据对象并提供对话框和向导以允许用户更新这些对象(即添加/编辑用户)。

最初我以为我会让 DAL 对象具有通用数据提供者对象,以便客户端和服务器都可以使用它们。例如,当服务器使用数据对象时,数据库是数据提供者;当客户端使用数据对象时,服务器是数据提供者。

所以一个对象在表现层被改变,例如一个“user”:user->setName(“Fred”),然后像这个user->commit()一样提交它,commit方法调用数据提供者的commit 方法,然后对对象进行编码并将其发送到服务器。然后服务器用业务层对象“装饰”它并从那里继续。

我目前将此作为原型工作,DAL 对象定义在客户端和服务器都使用的共享项目中。然后服务器注入它的数据提供者(它使用数据库),客户端注入一个使用服务器的数据提供者。

我想知道这是否是一种合理的方法?我一直想知道是否需要另一层而不是将 DAL 对象直接暴露给客户端。也许是数据传输对象层,它会给我 3 层:数据访问对象、业务逻辑对象和数据传输对象。

谢谢。

【问题讨论】:

【参考方案1】:

暴露“内部对象”(如使用/退回的对象)购买 DAL 并不是一个好主意。更好地保持所有内部对象对客户端隐藏,并拥有一整套用于客户端-服务器通信的对象。将一个对象转换为另一个对象可能需要一些额外的工作,但如果服务器和客户端不一起升级,升级系统会变得更加容易。

【讨论】:

+1 在非平凡系统中,您要在这些层之间交换的数据会有所不同。如果您确实想重用某些东西,那么接口(实现的对象)可能没问题 - 但我自己从来没有这样做过。

以上是关于DAL/BLL 和客户端/服务器:客户端应该使用 BLL 还是 DAL 对象进行演示?或者可能是另一层(数据传输对象?)的主要内容,如果未能解决你的问题,请参考以下文章

通用 DAL / BLL 类

C# EF6+DAL+BLL开发框架

使用 DAL BLL 函数的 Windows 窗体不显示对象

C# .NET4.0 TableAdapter.Update() 不会插入新记录

如何在 3 层(单层)应用程序中在 BLL 和 UI 之间传递数据?

我应该使用 Linq 和 IQueryable<T> 来实现查询对象模式