簡體   English   中英

如何將EF對象與UI分離

[英]How to decouple EF objects from UI

我有一個N層應用,UI,BLL和DAL。 我的DAL對所有數據庫交互都使用EF6。

這意味着,如果我查詢數據庫,然后想要遍歷UI中的對象(例如在屏幕上顯示值的foreach循環),則UI必須了解DAL。 這似乎不正確。 我希望DAL一無所知。 Bll可以知道DAL。 UI只能知道BLL。

請考慮這個簡化的EF對象

partial class Foo 
{
    public int Id { get; set; }
    public virtual ICollection<Bar> FooFoo { get; set; }
}

我能想到的唯一方法是是否還有一個Bll.Foo來映射這兩個對象。 然后我想,如果它們都實現IFoo接口,可能會更好。 但是Foo具有Bar的Collection,它也需要是IBar類型。 這就是問題所在。 請考慮:

class Foo : IFoo                                          //generated by EF
{
    public int Id { get; set; }                           //generated by EF
    public virtual ICollection<Bar> FooFoo { get; set; }  //generated by EF and KABOOM
}

interface IFoo
{
    ICollection<IBar> FooFoo { get; set; }   
}

class Bar : IBar
{
    public int MyPr
    { get; set; }
}

interface IBar
{
    int MyPr { get; set; }
}

上面的問題(我已經向其展示了Kaboom)是,接口不是“令人滿意的”,因為它是通過EF作為Bar類型輸入的,但是接口說我需要將其實現為IBar類型。 沒有這個,我就不會解耦...

我該如何實現?或者我的理解存在缺陷?

您關於創建模型和映射2的想法是一種將UI與DAL實體無關的好方法。 您的BLL將具有一個BLL.Foo,它映射2個對象。 您的BLL會公開BLL.Foo,以便其上的層可以使用它們。 這樣,只有BLL才能了解DAL實體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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