2014-11-02 63 views
2

儘管使用了Google,我找不到明確的答案來解決我的疑問。單一責任原則和知識庫

我想盡可能地應用「固體」,並嘗試使用常識,並避免模式,當我看到模式創造更多的問題比它試圖解決。我不想應用模式,並使對於其他人使用我的代碼只是爲了「我寫模式」,如果你明白我的意思,就難以做到了。

現在我正在努力應對我認爲最容易掌握的原理之一「SRP」

你如何實際應用這些原則到知識庫?

讓我們假設我有一個

  1. IEmployeeRepository
  2. IUserRepository
  3. IProductRepository

和通常他們將有類似的論文

public interface IUserRepository 
{ 
    User GetUser(int id); 
    IEnumerable<User> GetAllUser(); 
    void DeleteUser(int id); 
} 

同爲EMP方法loyees和產品。

我們是不是說每個方法都應該是一個類?即使有時我們正在談論一行代碼?

任何地方的任何建議或示例應用程序將不勝感激。

千恩萬謝

+0

可能在這裏更好:http://programmers.stackexchange.com/ – jessehouwing 2014-11-02 17:37:07

回答

2

如果你有一個很難搞清楚的單一責任模式的限制,那麼你可以代替去尋找的不使用SRP類明顯的例子。例如,一個爲用戶實現業務規則的類,以及配置用戶數據庫的備份的方式,另外還有一些特殊的日誌記錄,因爲它是一個非常整潔的黑客攻擊,因此它公開公開的文件。你一定要避免這種情況。

您似乎能夠一路應用SRP的原因之一,以便每個方法可以在一個單獨的類中,可能是因爲您有一個貧血域模型。也許你的應用程序只是在數據庫之上暴露CRUD操作,並且你的應用程序中沒有實現真正的業務規則?

在任何情況下,它都沒有應用SRP將UserRepository劃分爲每種方法的類,但是您甚至可以得到這個想法可能是UserRepository在您的體系結構中沒有任何目的。

1

對於基本的CRUD操作,它的共同使用一個通用存儲庫:

public interface IRepository<T> 
{ 
    T Get(int id); 
    IEnumerable<T> GetAll(); 
    T Update(T item) 
    void Delete(int id); 
} 

或相似。然後你的具體實現可以從一個基地繼承。

+0

您好,我其實有一個通用的存儲庫,但仍不能以某種方式回答問題 – developer9969 2014-11-02 18:31:25

0

我想說這取決於您在哪裏設置「單一職責」的範圍。在我看來,你可以說:

  • 每個存儲庫都有單一的責任來管理只有一種類型的實體。這意味着您的UserRepository中的所有方法都應與User實體相關,但不與其他方法(如產品)相關。這意味着您的UserRepository中不應該有任何方法,如GetProducts或類似的東西。

  • 存儲庫中的每個方法也應該有其唯一的責任。這意味着每個方法只能處理一個特定的情況(如創建,刪除等)。

這樣一來,你仍然會履行SRP原則(根據其周圍上下文),而不必創建爲每個函數的類(這似乎是在我看來有點大材小用)。

相關問題