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

您可能已经为自己解决了这个问题,但无论如何我都会提供意见。
你的第二个例子:

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.

于 2011-10-11T08:27:56.460 回答