我需要一些建議,指出我的服務和存儲庫在哪裏畫線。服務層和存儲庫的責任
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