【发布时间】:2012-02-13 11:57:49
【问题描述】:
我需要一些关于在哪里划清我的服务和存储库的建议。
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;}
}
让我们假设 Avatar 模型将仅用于 Contact 模型,并且它是 Contact 上的可选属性。我的存储库是否应该负责向联系人添加 Avatar,或者业务/服务层是否应该扩展该功能?有人可能会争辩说,拥有头像是一项业务需求,但由于它是模型的一部分,因此数据层应该知道如何处理它。
我建议我们可以通过存储库添加添加/更新和删除头像的功能。业务/服务层将负责保存物理文件、验证和调用存储库上的适当方法。所有存储库关心的是附加适当的联系人并向其添加头像。
我的想法是,由于头像仅用于联系人,目前,我们将扩展存储库,从而为 DAL 添加功能。这可能对单独的 API 有用。
【问题讨论】:
-
Offtop,为什么您需要
Contact类中的AvatarId属性,因为您可以使用Avatar.Id访问它? -
@sll 我认为这是实体框架(代码优先)协助定义导航属性 Avatar 所必需的
-
@sll:我将它用于实体框架的导航和映射。我可以告诉 EF,头像在数据库中可以为空。
-
@MikeHanrahan EF 绝对不需要。只需使用
Avatar即可映射关系。 -
@Yuck,虽然它不是必需的,但它允许您在映射中为该实体指定空值。
标签: c# entity-framework-4 repository service-layer