我正在使用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 中,我将使用 ViewController ViewController来实现这个要求,对照片的变化做出反应(考虑到当前的“拥有视图”)。但是这个解决方案有一些缺点:
1) 缩略图属性设置器不能再是私有的。
2)(单元)测试非常困难,因为设置 ViewController 基础设施需要额外的代码。
3) ViewController 仅在有视图时才处于活动状态。但也可以从自定义 OData 服务编辑照片。当然,我可以/应该将 ImageProcessing 代码从 ViewController 移动到实用程序类/方法,但我必须记住在使用我的 OData 控制器时调用此代码。
4) 从通用列表视图查看/编辑照片时,ViewController 不知道要使用哪种质量设置(因为现在,只有通用照片类并且不存在对“所有者”的反向引用)。当然可以继承各种 Photo 类(UserPhoto/InspectionPhoto/...),但这有意义吗?
我认为生成和保留缩略图是一项很常见的任务,因此我对您的想法非常感兴趣。我也喜欢 DDD/富域模型的概念/想法,因此我想知道是否可以在我的情况下采用这些概念