作为背景,我有一个数据层和服务层,松散地基于Rob Conery 的店面模型,就像 Rob 的一样,我的许多域对象都用LazyList<>
's 和LazyItem<>
's 链接,以利用 Linq2Sql 提供的延迟执行,因为我的Lazy*
类型利用IQueryable<T>
而不是这种令人敬畏的委托方法。
所以我有一个像这样的对象图(基本上,每个活动都应该有一个包含许多图像的照片库 - 缩略图和全尺寸照片):
latest3Activities[0].Gallery.Images.Inner[1].FullImage
该Gallery
类型具有 Images 属性,LazyList<PhotoGalleryImage>
因此IList<PhotoGalleryImage>
LazyList 就是Inner
您所看到的。每个PhotoGalleryImage
项目都有一个FullImage
属性和一个Thumbnail
属性,两者都是 type Image
。
这个想法是将完整的 rez 上传照片存储在PhotoGalleryImage.FullImage
属性中,最初,Thumbnail
属性是Null
. 我要的是:当Thumbnail
第一次访问该属性时,如果Null
我希望我的服务层生成 Thumb,将其保存到数据库,然后返回Image
较小照片的实例。我拥有从全尺寸图像创建缩略图的所有代码,所以这不是这里的问题。
我想不通的是如何捕获Thumbnail
属性的第一次访问(在我的IQueryable<>
架构上下文中),然后让服务层进行调整大小而不是存储库(DAL)。我强烈认为服务(业务)层应该负责这个功能决策,但我不知道如何使它工作。
目前,我正在考虑从存储库中的域类到 Linq2Sql 类的映射将是识别我所指的这种“首次访问”的好地方,但我不知道较低层如何调用服务层并执行收缩(或者即使可以,也应该这样做)。
也许我的设计限制了我让 Repos 进行转换。也许我根本不希望服务层执行这个逻辑。也许我的设计太可怕了,我真的不应该面对这个烂摊子。
请帮忙。感谢所有反馈。