我应该为不同的具体类使用不同的API方法吗?
我正在为贺卡编写API 卡片只包含行和卡片ID的列表。卡片有一种称为问候语的方法 一行就是一组字符 我有一个接口卡和几个实现这个接口的具体类,即。e、 圣诞卡,伊斯特卡。。。等等 我正在编写一个API方法,通过ID返回卡我应该为不同的具体类使用不同的API方法吗?,api,design-patterns,Api,Design Patterns,我正在为贺卡编写API 卡片只包含行和卡片ID的列表。卡片有一种称为问候语的方法 一行就是一组字符 我有一个接口卡和几个实现这个接口的具体类,即。e、 圣诞卡,伊斯特卡。。。等等 我正在编写一个API方法,通过ID返回卡 从设计角度来看,编写基于ID返回任何类型卡的单个API方法更好,还是为每种卡类型编写API更好 这类问题的答案总是一样的:这取决于,所有的设计模式都有权衡,这就是软件工程 一般来说,我的方法如下所示。 因此,如果将卡片作为抽象并包含id,您可能应该定义返回任何类型的findBy
从设计角度来看,编写基于ID返回任何类型卡的单个API方法更好,还是为每种卡类型编写API更好 这类问题的答案总是一样的:这取决于,所有的设计模式都有权衡,这就是软件工程 一般来说,我的方法如下所示。
因此,如果将
卡片
作为抽象并包含id
,您可能应该定义返回任何类型的findById
(这意味着它将返回抽象类型,卡片
)因为此操作仅使用id
字段,该字段与Card
类的派生无关。通过这种方式,API代码与卡的特定实现解耦。如果您希望代码被重用到共享相同逻辑的其他实体
,那么可以使用泛型进行更进一步的操作
如果按照您的建议为每种卡类型编写API,那么您的API将与实现耦合,因此添加的每一个新衍生产品都会影响您的API(您可能应该将新添加的类型添加到API中)
通常,您希望依赖抽象,而不是实现细节这类问题的答案总是一样的:这取决于,所有设计模式都有权衡,这就是软件工程
一般来说,我的方法如下所示。
因此,如果将卡片
作为抽象并包含id
,您可能应该定义返回任何类型的findById
(这意味着它将返回抽象类型,卡片
)因为此操作仅使用id
字段,该字段与Card
类的派生无关。通过这种方式,API代码与卡的特定实现解耦。如果您希望代码被重用到共享相同逻辑的其他实体
,那么可以使用泛型进行更进一步的操作
如果按照您的建议为每种卡类型编写API,那么您的API将与实现耦合,因此添加的每一个新衍生产品都会影响您的API(您可能应该将新添加的类型添加到API中)
一般来说,您希望依赖抽象,而不是实现细节thx@Alexis,那么创建呢?为每张卡创建一个创建方法是否更好?还是为所有卡片创建一种方法?(给定的卡可以有不同的参数)您应该为此使用工厂方法模式,并将该职责委托给其他类。您可以创建一个工厂方法,该方法将参数(例如字符串或枚举)作为输入,并根据输入(可能使用switch语句)返回特定的direvive。(返回类型应为卡
)thx@Alexis,如何创建?为每张卡创建一个创建方法是否更好?还是为所有卡片创建一种方法?(给定的卡可以有不同的参数)您应该为此使用工厂方法模式,并将该职责委托给其他类。您可以创建一个工厂方法,该方法将参数(例如字符串或枚举)作为输入,并根据输入(可能使用switch语句)返回特定的direvive。(返回类型应为卡
)