gpt4 book ai didi

c# - 为每个类提取一个接口(interface)是最佳实践吗?

转载 作者:IT王子 更新时间:2023-10-29 03:51:41 24 4
gpt4 key购买 nike

我看过代码,其中每个类都有一个它实现的接口(interface)。

有时它们没有通用的接口(interface)。

它们就在那里,它们被用来代替具体的物体。

它们不为两个类提供通用接口(interface),而是特定于该类解决的问题领域。

有什么理由这样做吗?

最佳答案

没有。

接口(interface)适用于具有复杂行为的类,如果您希望能够创建该接口(interface)的模拟或假实现类以用于单元测试,则接口(interface)特别方便。

但是,有些类没有很多行为,可以更像值一样对待,通常由一组数据字段组成。为这样的类创建接口(interface)没有什么意义,因为这样做会引入不必要的开销,而模拟或提供接口(interface)的替代实现毫无意义。例如,考虑一个类:

class Coordinate
{
public Coordinate( int x, int y);
public int X { get; }
public int y { get; }
}

您不太可能希望接口(interface) ICoordinate 与此类一起使用,因为除了简单地获取和设置 XY 值。

但是,类

class RoutePlanner
{
// Return a new list of coordinates ordered to be the shortest route that
// can be taken through all of the passed in coordinates.
public List<Coordinate> GetShortestRoute( List<Coordinate> waypoints );
}

您可能需要 RoutePlannerIRoutePlanner 接口(interface),因为有许多不同的算法可用于规划路线。

此外,如果您有第三堂课:

class RobotTank
{
public RobotTank( IRoutePlanner );
public void DriveRoute( List<Coordinate> points );
}

通过为 RoutePlanner 提供一个接口(interface),您可以为 RobotTank 编写一个测试方法,该方法创建一个带有仅返回列表的模拟 RoutePlanner坐标没有特别的顺序。这将允许测试方法检查坦克是否在坐标之间正确导航,而无需同时测试路线规划器。这意味着您可以编写仅测试一个单元(坦克)的测试,而无需同时测试路线规划器。

不过您会看到,将真实的坐标输入到这样的测试中非常容易,而无需将它们隐藏在 ICoordinate 界面后面。

关于c# - 为每个类提取一个接口(interface)是最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036749/

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