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

Architecture DAL/BLL和客户机/服务器:客户机应该使用BLL还是DAL对象进行表示?或者另一层(数据传输对象?),architecture,data-access-layer,data-access,bll,Architecture,Data Access Layer,Data Access,Bll,我正在编写一个客户机/服务器系统。服务器采用DAL/BLL设计。客户机负责显示数据对象,并提供对话框和向导,以允许用户更新这些对象(即添加/编辑用户) 最初,我认为我将使DAL对象具有一个通用的数据提供程序对象,以便客户端和服务器都可以使用它们。例如,当服务器正在使用数据对象时,数据库是数据提供者;当客户机正在使用数据对象时,服务器就是数据提供者 因此,对象在表示层被更改,例如“user”:user->setName(“Fred”),然后像这个user->commit()一样提交它,commit

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

最初,我认为我将使DAL对象具有一个通用的数据提供程序对象,以便客户端和服务器都可以使用它们。例如,当服务器正在使用数据对象时,数据库是数据提供者;当客户机正在使用数据对象时,服务器就是数据提供者

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

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

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


谢谢。

公开“内部对象”不是一个好主意,比如购买DAL时使用/返回的对象。最好对客户机隐藏所有内部对象,并为客户机-服务器通信提供一套完整的对象。将一个对象转换为另一个对象可能需要一些额外的工作,但如果服务器和客户端不一起升级,升级系统会更加容易。

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