Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该为不同的具体类使用不同的API方法吗?_Api_Design Patterns - Fatal编程技术网

我应该为不同的具体类使用不同的API方法吗?

我应该为不同的具体类使用不同的API方法吗?,api,design-patterns,Api,Design Patterns,我正在为贺卡编写API 卡片只包含行和卡片ID的列表。卡片有一种称为问候语的方法 一行就是一组字符 我有一个接口卡和几个实现这个接口的具体类,即。e、 圣诞卡,伊斯特卡。。。等等 我正在编写一个API方法,通过ID返回卡 从设计角度来看,编写基于ID返回任何类型卡的单个API方法更好,还是为每种卡类型编写API更好 这类问题的答案总是一样的:这取决于,所有的设计模式都有权衡,这就是软件工程 一般来说,我的方法如下所示。 因此,如果将卡片作为抽象并包含id,您可能应该定义返回任何类型的findBy

我正在为贺卡编写API

卡片只包含行和卡片ID的列表。卡片有一种称为问候语的方法

一行就是一组字符

我有一个接口卡和几个实现这个接口的具体类,即。e、 圣诞卡,伊斯特卡。。。等等

我正在编写一个API方法,通过ID返回卡


从设计角度来看,编写基于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。(返回类型应为