DAL和BLL与延迟加载

时间:2010-08-25 05:54:11

标签: lazy-loading n-tier-architecture

如何在三层的上下文中实现延迟加载?我理解表示层,业务层和数据层的基本架构:

你有基本的“哑”类几乎是数据库中表的镜像,只有一个例外。您可以使用对所引用内容的实际实例的引用,而不是外键ID。例如:具有名称/ DOB /标题属性的员工。

然后,对于这些类中的每一个,您都有一个类,它提供对它的CRUD操作以及您可能需要的任何自定义数据存储例程(调用与该对象一起使用的存储过程等)。如果更改了数据库,则会更换此类。例如:EmployeeDAL.Save(myEmployee),EmployeeDAL.Get(myEmployee)(其中myEmployee的ID已填充,但没有其他内容)

您有业务层类来执行验证,而不是。这些类中的方法通常通过调用DAL来持久保存信息或检索它来结束。当客户改变他们对有效/无效数据的构成或想要改变某些计算方式的想法时,这会发生变化。

表示层与业务层交互,以显示UI中的内容和穿梭插入/更新到较低层。例如:它遍历Employees列表并将它们显示在HTML表格中。

但延迟加载引用的代码到底在哪里呢?如果表示层有一个刚刚显示的Company对象并且正在开始显示myCompany.Employees的过程,那么它是如何实现的? myCompany是一个镜像数据库表的哑类的实例,不应该知道如何检索任何东西。

您是否回答this问题建议并创建每个对象的虚拟版本?那么DAL级别对象可以有变量来指示Employees是否已经加载并调用DALEmployee.GetEmployees(this)?我觉得我好像错过了关于模式的一些关键...

1 个答案:

答案 0 :(得分:0)

如果使用预构建的框架(如nHibernate),这将使事情变得更加容易,您可以在类/表映射中以及运行查询时定义延迟加载。虽然.NET 4中的System.Lazy类可能会有所帮助,但是要以一种简洁的方式自己完成它会占用相当多的代码。