gpt4 book ai didi

c# - IService 扩展 IRepository 是否正确?

转载 作者:行者123 更新时间:2023-11-30 15:42:13 24 4
gpt4 key购买 nike

可以说我的 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) { ... }
}

请注意,我将存储库作为一个属性,并在我的服务类中公开了该属性。

因此,如果您需要在存储库中添加、删除或获取某些对象,我可以通过此属性访问它。

你有什么看法?这样做正确吗?

最佳答案

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

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 中执行任何额外操作。

关于c# - IService 扩展 IRepository 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com