当前位置: 首页 > 知识库问答 >
问题:

继承和REST API控制器-处理子类

房泉
2023-03-14
Promotion - abstract
 - Coupon
 - Sale
 - Deal

对于每个子类,我都有一个DAO和服务类,如CouponDAOCouponService等。

在前端,用户可以通过Angular 2界面创建优惠券、销售或交易,所以我决定使用以下控制器:

PromotionController - abstract
 - CouponController
 - SaleController
 - DealController

(CouponController、SaleController、DealController从PromotionController继承)

promotioncontroller将包含所有子类通用的所有通用CRUD函数,并且在特定的控制器中,我将处理那些类的特定操作。

A)现在面临的问题是如何实例化来自客户端的正确对象。例如,当用户提交优惠券、销售或交易时,我如何实例化正确的对象。例如,在PromotionController中,我有如下函数::

@RequestMapping(value=CREATE_PROMO, method=RequestMethod.POST)
    public ResponseEntity<?> create(@RequestBody Promotion promotion){
        promotionService.save(promotion);
        return new ResponseEntity<>("", HttpStatus.OK); 
    }

提升是抽象的,是函数的论元。我是否应该使用工厂模式和**type**属性来创建正确的对象?例如,如果type=“Coupon”,则创建Coupon对象,如果type=“Sale”,则创建Sale对象

B)由于控制器使用了Services对象,这意味着我必须声明PromotionController中的所有三个Services对象。因为在实例化正确的对象之后,我需要调用其相应的服务来完成这项工作。在上面的方法中,我有promotionService我认为应该用subclass的正确服务来替换它

C)我正在寻找如何处理在现实世界中处理子类的REST API,就像我上面描述的情况

D)我想通过将所有CRUD操作复制到它们的特定控制器来简化自己的操作,但这似乎是重复的代码。

我认为有一个更好的方法可以做到。

我也尝试过,如果我能找到一个开源项目来处理这种情况,但似乎我找到的所有项目都使用一个类,而不是继承。它们的REST/API不处理html" target="_blank">继承情况

共有1个答案

蔚楷
2023-03-14

在我看来,保持你的endpoint简单。从REST API的角度出发,创建单独的或仅一个控制器,并在控制器层之后使用以下模式。从我所看到的情况来看,最好让RESTendpoint远离继承/重用,并在接收和验证请求之后应用它。

要从控制器实例化服务/帮助器层,请使用工厂方法模式:

https://en.wikipedia.org/wiki/factory_method_pattern

@RequestMapping(value=CREATE_COUPON, method=RequestMethod.POST)
    public ResponseEntity<?> create(@RequestBody Promotion promotion){
//helper if adding one more helper layer. The factory invocation is then //transferred to the helper layer
  PromotionService couponService = promotionServiceFactory.get(PROMOTYPES.COUPON);
couponService.save(promotion);
        return new ResponseEntity<>("", HttpStatus.OK); 
    }

从您的问题来看,不同的推广类型似乎有通用的CRUD/OTHER方法。如果每个升级的一些步骤/子任务都是相同的,而其他的则有所不同,那么这是服务层中模板模式的一个很好的候选者。否则,您可以通过创建一个抽象的提升服务来存储常见的CRUD方法。

https://en.wikipedia.org/wiki/template_method_pattern

使用主要方法和常见CRUD方法的实现创建一个抽象的升级服务。使用不同的方法创建其他推广服务类型的单独实现。

 类似资料:
  • 本文向大家介绍AngularJS控制器继承自另一控制器,包括了AngularJS控制器继承自另一控制器的使用技巧和注意事项,需要的朋友参考一下 AngularJS里控制器继承,常用的就是作用域嵌套作用域。默认情况下,当前作用域中无法找到某个属性时,就会在父级作用域中进行查找,若找不到直至查找到$rootScope。 但有些情况下,rootScope下就是我们的controller,不可能将大量的公

  • 问题内容: 我试图弄清楚控制器继承是如何工作的。我有三个控制器: 和我的看法 但它们都显示“主要”。我该如何解决? 这是一个小提琴http://jsfiddle.net/g3xzh4ov/3/ 问题答案: 这是一个如何在Angular中扩展控制器的示例。 它要求使用,它取代有,它是这样的情况特别好。 注意,它是在幕后使用的,而不是其他Angular服务类型的用法,因此可以将语句从控制器直接带到单独

  • 我有一个父类和子类、和,它们描述了如何购买水果的不同类型。 在篮子里插入购买的特定水果; 计算购买水果的总价值; 计算用于给定类型水果(水果名称)的总金额 为了与其他项目的类兼容,在各个类中使用的执行要支付金额的计算的方法将具有名称payFruit,返回类型double并且没有参数。此方法必须在接口中声明。 注意:我知道这可能对我的情况很特殊,对其他人没有太大帮助,但我发现这个类层次结构在使用时有

  • 本文向大家介绍Codeigniter控制器controller继承问题实例分析,包括了Codeigniter控制器controller继承问题实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Codeigniter控制器controller继承问题。分享给大家供大家参考,具体如下: 在项目中经常用到这样一种情况,后台中每个页面都要判断Session来确定用户是否登陆状态.对于在Cod

  • 我有一个简单的类,注释为 例如: 然后我有一个扩展这个bean的配置bean: 似乎忽略了有条件的,无论条件如何解决,都会始终处理配置(甚至没有调用) 只要我将有条件注释移动到MyConfig,一切都会正常工作。 从文档: @条件注释可以以下列任何一种方式使用: 作为使用@组件直接或间接注释的任何类的类型级注释,包括@配置类 我假设第一点适用于这里,即MyConfig间接地用配置注释。或者间接引用

  • > RDF/OWL中继承的含义是什么? 是否可以用OWL/RDF构造面向对象语言类型的类-子类继承? 请考虑以下示例。是否“讲师”和“学生”的所有属性都将提供给“人”类? 如果有人提供给我一个很好的例子,这将是非常有帮助的答案。提前谢谢你。