只是一个简单的问题。在具有业务逻辑层( BLL )和数据访问层( DAL )的分层体系结构环境中,DAL应该传递到BLL的类型是什么?
目前,我们的DAL类生成DataTables和SQlDataReader对象(包括常见的数据类型)。在传递给BLL之前,应该在DAL中完成对象到自定义类型的转换吗?还是DAL应该传递原始类型,BLL进行转换?
我正在考虑一种情况,即DAL层将来可能会被另一种技术所取代。在这种情况下,听起来BLL应该期望转换数据类型,这样在进行切换时,我们只需要确保返回对象?
任何澄清这一点或阅读材料,以澄清事情将是有帮助的!
提亚
发布于 2017-03-15 05:37:57
虽然有指导方针,但这方面没有任何硬性规定。此外,指南可能会根据体系结构、规模、需求、优先级、所使用的ORM等来更改每个项目。请参阅this。
正如我所说,没有什么是确定的,下面是我在我的大项目中所做的事情。
我正在使用NHibernate ORM。我的DAL返回实体。我的BLL接收实体并将其转换为DTO。然后将DTO传递到应用层。并非所有情况都是如此。请参阅this帖子。我在答覆中已详细说明为何会这样做。
对于我的小项目,我使用Dapper。在这种情况下,我的DAL返回实体。BLL接收实体并将其作为应用程序传递。由于Dapper不创建代理,所以我不将实体转换为DTO。
看起来你没有使用任何ORM。第二种方式(将实体转移到BLL,与应用程序相同)可能是更好的方法。但你也应该考虑到我上面提到的其他方面。
在上述任何情况下,DAL都应该返回转换对象(如实体/POCO),而不是ADO.NET对象。以这种方式,只要您的接口不中断,将来的任何技术切换都只需要在DAL中进行更改。
传输ADO.NET对象(DataTable、DataReader)将DAL和整个项目绑定到一种技术上。很难改变这项技术。另一方面,如果DAL返回实体(普通c#类),则可以在DAL中切换技术,并且应用程序不受影响。在BLL中做什么取决于您基于其他考虑。
在传递给BLL之前,应该在DAL中完成对象到自定义类型的转换吗?还是DAL应该传递原始类型,BLL进行转换?
对象的转换应该在DAL进行。转换的对象应该传递给BLL。
https://stackoverflow.com/questions/42791536
复制相似问题