【发布时间】:2010-10-25 19:02:23
【问题描述】:
对于背景,我有一个松散地基于Rob Conery's Storefront 模型的数据层和服务层,就像 Rob 的一样,我的许多域对象并与 LazyList<> 和 LazyItem<> 链接以利用延迟鉴于我的Lazy* 类型使用IQueryable<T> 而不是this awesome delegate approach,Linq2Sql 提供的执行。
所以我有一个像这样的对象图(基本上,每个 Activity 都应该有一个包含许多图像的照片库 - 缩略图和全尺寸照片):
latest3Activities[0].Gallery.Images.Inner[1].FullImage
Gallery 类型的 Images 属性为 LazyList<PhotoGalleryImage>,因此该 LazyList 中的 IList<PhotoGalleryImage> 就是您看到的 Inner。每个PhotoGalleryImage 项都有一个FullImage 属性和一个Thumbnail 属性,两者都是Image 类型。
这个想法是将完整的 rez 上传照片存储在 PhotoGalleryImage.FullImage 属性中,最初,Thumbnail 属性是 Null。
我要的是:当第一次访问Thumbnail 属性时,如果是Null,我希望我的服务层生成Thumb,将其保存到数据库,然后返回Image 实例这是较小的照片。我有从全尺寸图像创建缩略图的所有代码,所以这不是这里的问题。
我想不通的是如何捕获Thumbnail 属性的第一次访问(在我的IQueryable<> 架构上下文中),然后让服务层调整大小而不是存储库(DAL)。我强烈认为服务(业务)层应该负责这个功能决策,但我不知道如何使它工作。
目前我认为从存储库中的域类到 Linq2Sql 类的映射将是识别我所指的这种“首次访问”的好地方,但我不知道如何调用较低层进入服务层并执行收缩(或者即使可以,它应该)。
也许我的设计限制了我让 Repos 进行转换。也许我根本不希望服务层执行这个逻辑。也许我的设计太可怕了,我真的不应该面对这个烂摊子。
请帮忙。感谢所有反馈。
【问题讨论】:
-
请详细说明您将如何使用缩略图图像实例。
-
好的-在活动的详细视图中,我将通过 ajax 加载相关照片库的拇指(Facebook 是如何做到的)。每个图库图片项都让我可以访问缩略图(用于图像表)和完整尺寸的缩略图(用于当用户单击拇指时)。
标签: asp.net-mvc linq-to-sql domain-driven-design lazy-loading iqueryable