使用具有多个 类 的接口的最佳方法是什么 类 不实现相同的子接口?
What is the best way to use an Interface with multiple classes where classes don't implement the same subinterfaces?
我正在尝试为每个逻辑创建一个通用服务接口-class 以与数据库通信。
请参阅代码示例以获得比文字更好的解释。
例如:
富
public interface ICreateFoo
{
void CreateFoo(Foo foo);
}
public interface IReadFoo
{
void ReadFoo(Foo foo);
}
栏
public interface ICreateBar
{
void CreateBar(Bar bar);
}
public interface IReadBar
{
void ReadBar(Bar bar);
}
IFooService
public interface IFooService : ICreateFoo, IReadFoo, IReadBar
{ }
FooService 实例
public class FooService : ICreateFoo, IReadFoo
{
public void CreateFoo(Foo foo){
//Something
}
public void ReadFoo(Foo foo){
//Something
}
}
BarService实例
public class BarService : ICreateBar, IReadBar
{
public void CreateBar(Bar bar){
//Something
}
public void ReadBar(Bar bar){
//Something
}
}
FooLogic 实例
public class FooLogic : IFooService
{
private readonly IFooService _fooService;
public FooLogic(IFooService fooService) {
_fooService = fooService;
}
public void CreateFoo(Foo foo){
//Check if bar exists
if(_fooService.ReadBar())
_fooService.AddFoo(foo);
else
//nothing
}
}
但是依赖注入当然不知道它应该获取哪个service
class实例,这是对接口的错误使用吗?因为它看起来很干净,但我还不知道如何实现。
我想到这个的原因是因为在将 Foo 添加到数据库之前我需要知道 Bar 是否存在。我想要 classes 根据 SOLID 原则(每个 class 都有自己的职责)。还是像这样在逻辑中注入每个服务更好:
public class FooLogic
{
private readonly IFooService _fooService;
private readonly IBarService _barService;
public FooLogic(IFooService fooService, IBarService barService) {
_fooService = fooService;
_barService = barService;
}
public void CreateFoo(Foo foo){
//Check if bar exists
if(_barService.ReadBar())
_fooService.AddFoo(foo);
else
//nothing
}
}
也许您有完全不同但更好的方法,请告诉我!我很欣赏代码示例:)
保持简单!
创建实现 IFooService 的 FooService。
FooLogic 应该被删除。您可以在方法 CreateFoo 中实现逻辑。
由于 FooService 将实现所有方法,您可以调用 ReadBar() 而不是 _barService.ReadBar(),因此无需组合,因为您已经拥有从所有其他接口继承的 IFooService。
这样,我们仍然尊重依赖注入模式。
我正在尝试为每个逻辑创建一个通用服务接口-class 以与数据库通信。 请参阅代码示例以获得比文字更好的解释。
例如:
富
public interface ICreateFoo
{
void CreateFoo(Foo foo);
}
public interface IReadFoo
{
void ReadFoo(Foo foo);
}
栏
public interface ICreateBar
{
void CreateBar(Bar bar);
}
public interface IReadBar
{
void ReadBar(Bar bar);
}
IFooService
public interface IFooService : ICreateFoo, IReadFoo, IReadBar
{ }
FooService 实例
public class FooService : ICreateFoo, IReadFoo
{
public void CreateFoo(Foo foo){
//Something
}
public void ReadFoo(Foo foo){
//Something
}
}
BarService实例
public class BarService : ICreateBar, IReadBar
{
public void CreateBar(Bar bar){
//Something
}
public void ReadBar(Bar bar){
//Something
}
}
FooLogic 实例
public class FooLogic : IFooService
{
private readonly IFooService _fooService;
public FooLogic(IFooService fooService) {
_fooService = fooService;
}
public void CreateFoo(Foo foo){
//Check if bar exists
if(_fooService.ReadBar())
_fooService.AddFoo(foo);
else
//nothing
}
}
但是依赖注入当然不知道它应该获取哪个service
class实例,这是对接口的错误使用吗?因为它看起来很干净,但我还不知道如何实现。
我想到这个的原因是因为在将 Foo 添加到数据库之前我需要知道 Bar 是否存在。我想要 classes 根据 SOLID 原则(每个 class 都有自己的职责)。还是像这样在逻辑中注入每个服务更好:
public class FooLogic
{
private readonly IFooService _fooService;
private readonly IBarService _barService;
public FooLogic(IFooService fooService, IBarService barService) {
_fooService = fooService;
_barService = barService;
}
public void CreateFoo(Foo foo){
//Check if bar exists
if(_barService.ReadBar())
_fooService.AddFoo(foo);
else
//nothing
}
}
也许您有完全不同但更好的方法,请告诉我!我很欣赏代码示例:)
保持简单! 创建实现 IFooService 的 FooService。 FooLogic 应该被删除。您可以在方法 CreateFoo 中实现逻辑。
由于 FooService 将实现所有方法,您可以调用 ReadBar() 而不是 _barService.ReadBar(),因此无需组合,因为您已经拥有从所有其他接口继承的 IFooService。
这样,我们仍然尊重依赖注入模式。