web-dev-qa-db-ja.com

単一責任の原則をリポジトリにどのように適用しますか

可能な限り「SOLID」を適用し、常識を働かせて、パターンが解決しようとしている問題よりも多くの問題を引き起こしていることがわかった場合は、パターンを回避しようとしています。 「パターンを書く」という意味だけを理解するために、パターンを適用して他の誰かが自分のコードを使用するのを困難にしたくないのです。

今、私は、私が最も理解しやすいと思った原則の1つである「SRP」と格闘しています。

この原則を実際にリポジトリにどのように適用しますか?

私が持っているとしましょう

IEmployeeRepository
IUserRepository
IProductRepository

そして一般的に彼らはこれらのようなメソッドを持っています:

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

従業員と製品についても同じです。

これらのメソッドはそれぞれ独自のクラスである必要があると言っていますか?たまに1行のコードを話しているのに?

5
developer9969

それぞれのクラスを変えることに興味を持つ人は誰でも考えるべきだと思います。たとえば、CalculatePayメソッドとsaveメソッドを持つUserクラスがあるとします。会計士はCalculatePayを変更し、DB管理者はsaveメソッドを変更する必要があります。これらは2つの異なる責任です。

SRPは、同じ理由で変化するものをグループ化することを意味します。したがって、リポジトリはSRPに違反してはなりません。

8
thesolidphp