【发布时间】:2016-06-03 12:18:20
【问题描述】:
我正在使用XPO/XAF 开发一个应用程序,我需要管理照片以及一些其他信息。
这是我用于照片实体的简化(伪)代码:
public class Photo
{
public Photo()
{
CreationDate = DateTime.UtcNow;
}
private Image imageData;
public Image Data
{
get { return imageData; }
set
{
imageData = value;
// Current Impl: Use static code to create thumbnail
Thumbnail = ImageService.CreateThumbnail(value);
}
}
public Image Thumbnail { get; private set; }
public Guid Id { get; }
public DateTime CreationDate { get; private set; }
public string Description { get; set; }
}
Photo 实体用于各种其他实体,例如
public class Inspection
{
public Photo Photo { get; set; }
}
public class User
{
public Photo Photo { get; set; }
}
每当照片的数据发生变化时,缩略图也应该更新。我发布的解决方案有效,但它很丑陋,不是吗?
而且也无法实现新要求:应该可以根据使用情况指定(应用程序范围内的)缩略图的质量(例如,检查缩略图的质量更高,用户缩略图的质量更低)。
在 XAF 中,我将使用 ViewControllerViewController 实现此要求,对照片的更改做出反应(考虑当前的“拥有视图”)。但是这个解决方案有一些缺点:
1) 缩略图属性设置器不能再是私有的。
2) (单元)测试非常困难,因为设置 ViewController 基础架构需要额外的代码。
3) ViewController 仅在存在视图时才处于活动状态。但也可以从自定义 OData 服务编辑照片。当然,我可以/应该将 ImageProcessing 代码从 ViewController 移动到实用程序类/方法,但我必须记住在使用我的 OData 控制器时调用此代码。
4) 从通用列表视图查看/编辑照片时,ViewController 不知道要使用哪种质量设置(因为现在,只有通用照片类并且不存在对“所有者”的反向引用)。当然可以继承各种 Photo 类(UserPhoto/InspectionPhoto/...),但这有意义吗?
我认为生成和保留缩略图是一项很常见的任务,因此我对您的想法非常感兴趣。我也喜欢 DDD/富域模型的概念/想法,因此我想知道是否可以在我的情况下采用这些概念
【问题讨论】: