3

私の 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) { ... }
}

リポジトリをプロパティとして配置し、サービス クラスでこのプロパティを公開していることに注意してください。

したがって、リポジトリ内のオブジェクトを追加、削除、または取得する必要がある場合は、このプロパティを介してアクセスできます。

あなたの意見は何ですか?これを行うのは正しいですか?

4

1 に答える 1

4

あなたはおそらくすでにこれを自分で解決しているでしょうが、とにかく私は意見を述べます.
2番目の例:

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

あなたが使うべきものです - それは素晴らしくてきれいです。最初の例に含まれているもののほとんどIUserServiceは完全に冗長で、IUserService実際に追加されるのはbool Approve(User usr). UserServiceまた、2 番目の例を使用すると、 を追加して 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

于 2011-10-11T08:27:56.460 に答える