簡體   English   中英

分層架構問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM