我读过关于依赖反转原理的文章,并看到了下面的例子
有一个名为IBird的接口如下所示
interface IBird
{
public void Eat();
public void Walk();
public void Fly();
}Pigeon类如下所示,来自接口,鸽子执行所有操作。
class Pigeon : IBird
{
public void Eat()
{
Console.WriteLine("Pigeon can eat");
}
public void Walk()
{
Console.WriteLine("Pigeon can walk");
}
public void Fly()
{
Console.WriteLine("Pigeon can fly");
}
}当我导出Ostrich时,Fly方法将不适用,因为它不能运行。
因此,为解决这一问题,创建了如下接口。
interface IEat { }
interface IWalk { }
interface IFly { }Ostrich和Pigeon类如下所示:
class Ostrich : IEat, IWalk
{
}
class Pigeon : IEat, IWalk, IFly
{
}我有一个澄清如下。
我们能不能按下面的方式来解决这个问题呢?
interface IFlyingBirds
{
public void Eat();
public void Walk();
public void Fly();
}对于不会飞的鸟类,我创建了一个单独的界面。
interface IFlightlessBirds
{
public void Eat();
public void Walk();
}Pigeon和Ostrich类如下所示:
class Pigeon : IFlyingBirds
{
}
class Ostrich : IFlightlessBirds
{
}这种方法有什么问题吗?
请对这件事放点光。
发布于 2021-08-15 11:20:13
这些坚实原则的底线,是使代码更易于理解、易于维护和易于扩展。
每个解决方案都可以工作,但是您的代码将这些行为分成两个不同的接口是否有意义呢?
或者也许创建这些接口会更好:
public interface IBird
{
public void Eat();
public void Walk();
}
public interface IFlyingBird : IBird
{
public void Fly();
}任何对你的代码更有意义的东西。
请注意,界面偏析原理告诉我们要尽可能多地拆分我们的行为,以便每个实体只按照它所需要的来声明。
这意味着,如果在一个地方您有一个Eagle类,并且您知道您永远不需要对它使用Walk()方法,那么为什么要用它声明它呢?
在这种情况下,这些声明更合理:
interface IEat
{
}
interface IWalk
{
}
interface IFly
{
}https://stackoverflow.com/questions/68789647
复制相似问题