[英]Layered Architecture Question
我正在開發一款軟件,其中包含一些實體,例如:
public class Workspace
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Playground> Playground { get; set; }
public virtual List<Workspace> Children { get; set; }
public virtual List<Member> Members { get; set; }
public virtual Workspace Parent { get; set; }
}
public class Playground
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual List<Service> Services { get; set; }
public virtual Workspace Workspace { get; set; }
}
public class Service
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual Playground Playground { get; set; }
}
這些是我的EF4 POCO對象。 我正在使用存儲庫模式和以下界面:
public interface IRepository<T>
{
void Add(T entity);
void Delete(T entity);
IEnumerable<T> Get(Expression<Func<T, bool>> expression);
IEnumerable<T> Get();
void Attach(T entity);
int Save();
}
存儲庫具有內部ObjectContext。 我有一個UnitOfWork,其中包含我的存儲庫實例,並負責保存對其所做的更改。
到目前為止,我做得對嗎?
我正在實現這樣的業務邏輯層:
public class DomainWorkspaceService : DomainServiceBase
{
public DomainWorkspaceService(Workspace workspace)
: base(UnitOfWorkFactory.GetInstance())
{
}
public void Create(Workspace workspace)
{
UoW.GetRepository<Workspace>().Add(workspace);
}
public void Delete(Workspace workspace)
{
var pservice = new DomainPlaygroundService();
foreach (var playground in workspace.Playground)
pservice.Delete(playground);
foreach (var child in workspace.Children)
Delete(child);
}
}
現在我不確定我會朝正確的方向前進。 我的POCO(將)負責驗證,並使我能夠做類似的事情
SomeWorkspace.Children.Add(new Workspace {...});
由於這些對象與上下文相關聯,因此當我保存它們時,對集合所做的更改是否也將保存在數據庫中?
另外,我希望沒有工作區就不能創建我的操場,沒有操場就不能創建服務。 我應該在哪里創建和刪除它們?
謝謝。
到現在為止還挺好。
您可能希望將Save
方法從存儲庫移至工作單元。 在實體框架中,您必須立即將所有更改保存在上下文中; 您無法按類型進行操作。 將其放在存儲庫上意味着僅將保存對存儲庫的更改,這可能是不正確的。
您可能希望將從工作空間到游樂場的級聯實現為數據庫級聯(實體框架將識別並支持),而不是手動對其進行編碼。
是的,將更改保存到上下文將保存所有跟蹤的更改,包括相關對象。
關於添加,如果您不公開ObjectContext,那么任何人都可以添加Playground的唯一方法是通過與您公開的對象的關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.