2011-10-10 65 views
3

說我的IService擁有IRepository所具有的一切,以及更多的特定操作是正確的嗎?IService擴展IRepository是否正確?

以下是代碼:

public interface IRepository<T> 
{ 
    T Add(T Entity); 
    T Remove(T Entity); 
    IQueryable<T> GetAll(); 
} 

public interface IUserService 
{ 

    //All operations IRepository 
    User Add(User Entity); 
    User Remove(User Entity); 
    IQueryable<User> GetAll(); 

    //Others specific operations 
    bool Approve(User usr); 
} 

注意,在IRepository所有操作也IService

這是正確的嗎?

如果是這樣,這將是更好的做這樣的事情:

public interface IUserService : IRepository<User> 
{ 
    bool Approve(User usr); 
} 

另一個選項是:

public interface IUserService 
{ 
    IRepository<User> Repository { get; } 

    //All operations IRepository 
    User Add(User Entity); 
    User Remove(User Entity); 
    IQueryable<User> GetAll(); 

    //Others specific operations 
    bool Approve(User usr); 
} 

public class UserService : IUserService 
{ 
    private readonly IRepository<User> _repository; 
    public IRepository<User> Repository 
    { 
     get 
     { 
      return _repository; 
     } 
    } 

    //Others specific operations 
    public bool Approve(User usr) { ... } 
} 

注意,我把倉庫的財產,在我的服務課上揭露這個屬性。

因此,如果您需要添加,刪除或獲取存儲庫中的某個對象,我可以通過此屬性訪問它。

您的意見是什麼? 這樣做是否正確?

+0

爲了防止你的問題被標記,並可能已經刪除,避免要求主觀題哪裏... 每一個答案都同樣有效:「你最喜歡什麼______」 與問題一起提供你的答案,你期望更多的答案:「我用______爲______,你用什麼?」 沒有實際的問題有待解決:「我很好奇,如果別人覺得我喜歡。」 我們被問到一個開放式的,假設的問題:「如果______發生了什麼?」 這是一個僞裝成一個問題的聲音:「______糟透了,我是對嗎?」 – cadrell0

+0

也許我不知道如何提出這個問題。我想知道的是如何公開我的存儲庫的方法。如果我將它們公開爲服務中的屬性,或者創建訪問存儲庫方法的方法。 – ridermansb

+0

@ cadrell0:他提供了3種可能的做事方式,並詢問他應該使用哪一種,不是出於主觀原因,而是出於客觀原因。 –

回答

4

你可能已經爲自己做了這件事,但我會提供意見。
你的第二個例子:

public interface IUserService : IRepository<User> 
{ 
    bool Approve(User usr); 
} 

是你應該使用什麼 - 這是非常乾淨的。在第一個例子中包含在IUserService中的大部分內容是完全多餘的,IUserService實際添加的唯一內容是bool Approve(User usr)。你還會發現,如果你用你的第二個例子,當您添加UserService並獲得Visual Studio來自動實現IUserService你結束了以下內容:

public class UserService : IUserService 
{ 
    public bool Approve(User usr) 
    { 
     throw new NotImplementedException(); 
    } 

    public User Add(User Entity) 
    { 
     throw new NotImplementedException(); 
    } 

    public User Remove(User Entity) 
    { 
     throw new NotImplementedException(); 
    } 

    public IQueryable<User> GetAll() 
    { 
     throw new NotImplementedException(); 
    } 
} 

public class User { } 

public interface IRepository<T> 
{ 
    T Add(T Entity); 
    T Remove(T Entity); 
    IQueryable<T> GetAll(); 
} 

public interface IUserService : IRepository<User> 
{ 
    bool Approve(User usr); 
} 

正如你所看到的,類型都是正確填充爲你,而不必在IUserService做任何額外的事情。

+0

好吧,我正在考慮將資源庫公開爲屬性;你怎麼看? – ridermansb