我需要一些建议,指出我的服务和存储库在哪里画线。服务层和存储库的责任
public class Contact
{
public Guid Id {get;set;}
public string Username {get;set;}
public Guid? AvatarId {get;set;}
public Avatar Avatar {get;set;}
}
public class Avatar
{
public Guid Id {get;set;}
public string FullSizeImagePath {get;set;}
public string ThumbnailSizeImagePath {get;set;}
}
让我们假设阿凡达模型将只用于联系人模型,并且它是联系人的可选属性。我的存储库是否应负责为联系人添加头像或者业务/服务层是否应扩展该功能?人们可以争辩说,拥有一个化身是一项业务需求,但由于它是模型的一部分,因此数据层应该知道如何处理它。
我建议我们可以添加功能来添加/更新和通过存储库删除头像。业务/服务层将负责保存物理文件,验证以及在存储库上调用适当的方法。所有存储库关心的是附加适当的联系人并为其添加化身。
我的思考过程是,由于头像只在联系人上使用,目前我们会扩展存储库,从而为DAL添加功能。这可能对单独的API有用。
Offtop,为什么在'Contact'类中需要'AvatarId'属性,因为您可以通过'Avatar.Id'来访问它? – sll 2012-01-18 18:53:58
@sll我认为这是实体框架(代码优先)所需要的,以帮助定义导航属性Avatar – 2012-01-18 18:55:56
@sll:我将它用于实体框架的导航和映射。我可以告诉EF,数据库中的头像可以为空。 – DDiVita 2012-01-18 19:01:14