[英]Which of those two entities implementations are better in ASP.net MVC
我是ASP.net MVC的初學者。 並且比WebForms更喜歡它。
因此,我決定啟動一個包含約6個表的項目:
我創建了兩個項目: FP.WebUI
和FP.Domain
。
在我的域項目中,我創建了3個文件夾Abstract
, Concrete
和Entities
。
在Abstract文件夾中,有6個接口IGallery
, ISessions
等。每個接口都具有以下內容:
namespace FP.Domain.Abstract
{
public interface IGallery
{
IQueryable<Gallery> Gallery { get; }
}
}
在Concrete
文件夾中還有另外7個類: EFDbGallery
, EFDbSessions
...和EFDbContext
,它們繼承自DbContext
類。
上面的每個類( EFDbContext
除外)都實現了每個對應的接口。
現在,當我想到它時,我發現我可以創建一個定義所有實體的接口,而在實現該接口的Concrete
文件夾中只有一個類。
我真的不知道有什么更好的方法:
6個接口 ,每個實體6個類 。
要么
1個接口 , 1個類 ,返回所有實體。
您似乎偶然發現了Repository模式。 典型的架構決策是創建一個接口
interface IRepository
{
IQueryable<Gallery> Query { get; }
}
然后讓您的ORM類實現存儲庫接口。
class MyDbContext : DbContext , IRepository
{
}
現在,在這一點上,要回答您的問題,我應該使用6個類和6個接口還是1個類和1個接口,答案是肯定的否!
典型的模式需要一個GENERIC接口(因此實際上有6個接口,但是只有一個接口源,如果需要額外的調用,則可以擴展通用接口)。
//Actually this implementation is edging on
//Unit Of Work
interface IRepository<T>
{
IQueryable<T> Query { get; }
void Insert(T item);
void SaveChanges();
}
然后,您的EfContext公開所有接口。 原因是您的控制器通常只需要一個接口即可工作,這使得在控制器上進行模擬/偽造測試變得更加容易(您不需要為GalleryControllerTest創建未使用方法的實現,例如InfoQuery)。
如果發現需要任何接口都有特定於域的代碼,則可以擴展IRepository接口。
interface IGalleryRepository : IRepository<Gallery>
{
void SomeSpecialOperation(Gallery item);
}
最后,如果/當您開始引入控制反轉時,此模式的實現將使生活變得更加輕松。
PS I通常會將ACTUAL EF代碼(即具體的存儲庫)重構為單獨的程序集,以防萬一您決定從項目中刪除EF。
我將使用7個類,因為它們將承擔不同的職責。
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.