2012-07-13 47 views
0

我正在使用ASP.NET MVC 3服務和存儲庫層可以發生多少活動?

我仍然對存儲庫層中會發生多少事感到困惑。我一直以來都認爲它只能做需要的事情,而沒有更多。

我一直使用服務層,然後調用我的存儲庫層。我總是有一個存儲庫層的相應服務層和一個存儲庫方法的相應服務層方法,即使它只是爲了獲取項目列表。所以,我有以下服務層:

public class UnitService : IUnitService 
{ 
    private readonly IUnitRepository unitRepository; 

    public UnitService(IUnitRepository unitRepository) 
    { 
      this.unitRepository = unitRepository; 
    } 

    public IEnumerable<Unit> GetAll() 
    { 
      return unitRepository.GetAll(); 
    } 
} 

這是我的倉庫層可能是什麼樣子:

public class UnitRepository : IUnitRepository 
{ 
    // Partial code 

    public IEnumerable<Unit> GetAll() 
    { 
      return DbContext.Units 
       .Include("Department") 
       .OrderBy(x => x.Name); 
    } 
} 

我想減少我的服務層類,如果是不是真的需要它。那麼只需從我的控制器而不是服務層調用存儲庫就可以了?如果我按照自己的方式行事,這真的很重要嗎?我的意思是它仍然帶回我所有的數據。

我會在哪裏做緩存和日誌記錄?服務層或存儲庫中?假設GetAll方法帶回了需要緩存的大量記錄。我會將其緩存在存儲庫中,還是需要一個服務層?

記錄也是如此。我會在哪裏登陸的東西,如:

Log.Info("Adding category: {0}, {1}", entity.Id, entity.Name); 
// adding code 
Log.Info("Category added: {0}, {1}", entity.Id, entity.Name); 

回答

0

如果所有您的服務層方法做的是委託給底層存儲庫的方法調用,然後是的,這是完全沒有刪除該服務層,因爲它沒有增值並直接從您的控制器使用存儲庫。

我在哪裏可以進行緩存和日誌記錄?服務層或在 存儲庫?假設GetAll方法帶回需要被緩存的記錄的很多 記錄。我會緩存這個存儲庫 或我需要一個服務層?

緩存應該在數據層完成。根據你數據訪問的方式,像NHibernate這樣的ORM已經包含了二級緩存,所以你所要做的就是激活它。就日誌而言,你可以在你的應用程序的每一層都做到這一點,這可能需要記錄一些東西。

+0

而日誌和緩存? – 2012-07-13 06:55:35

+0

在DAL緩存,日誌=>無論你需要登錄什麼。可能是控制器,模型,服務層,DAL,... – 2012-07-13 06:57:38

+0

如果我從Controller - > Service Layer - > Repository - >使用上下文,我的數據層是什麼。所以我假設在存儲庫層? – 2012-07-13 07:01:17