Edd*_*man 7 java rest spring spring-mvc spring-boot
我有优惠券和优惠平台正在开发的以下类层次结构::
Promotion - abstract
- Coupon
- Sale
- Deal
Run Code Online (Sandbox Code Playgroud)
(优惠券,促销和优惠继承自促销.促销有一个字符串属性调用type
和一个抽象方法,将子类的类型属性初始化为字符串值.例如type
,优惠券获取值"优惠券"等...)
对于每个子类中,我有一个DAO和 服务类,如CouponDAO
,CouponService
等.
在前端用户可以通过Angular 2界面创建优惠券或促销或交易,所以我决定拥有以下控制器:
PromotionController - abstract
- CouponController
- SaleController
- DealController
Run Code Online (Sandbox Code Playgroud)
(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);
}
Run Code Online (Sandbox Code Playgroud)
抽象的促销是功能的论据.我应该使用工厂模式和**type**
属性来创建正确的对象吗?例如,如果type ="Coupon",那么我创建Coupon对象,如果它是"Sale",那么我创建Sale对象
B)由于控制器使用Services对象,这意味着我必须在PromotionController中声明所有三个服务对象.因为在实例化正确的对象之后,我需要调用其相应的服务来完成这项工作.在上面的方法中,我有promoteService,我认为应该用子类的正确服务替换它
C)我正在寻找如何处理REST API,处理现实世界中的子类,就像我上面描述的情况
D)我想通过将所有CRUD操作复制到他们的特定控制器来使我自己变得容易,但似乎这将是重复的代码.
我认为有一种更好的方法可以做到.
我也试过,如果我能找到一个处理这种情况的开源项目,但似乎我找到的所有项目都使用一个类而不是继承.他们的REST/API不处理继承情况
小智 0
我认为你可以根据逻辑通过两种方式处理这个问题。如果您想将所有内容分开,请为优惠券/交易/销售创建不同的端点。这样每个端点都会调用它的控制器等等。
2)如果您认为代码相同,您可以使用抽象工厂模式来实例化正确的服务和DAO对象。
这完全取决于您的业务需求,如果代码逻辑几乎相同,我更喜欢第二种方式。每个继承一个控制器,这样将来如果层次结构增加,您不需要创建多个类,直到需要为止。
归档时间: |
|
查看次数: |
1524 次 |
最近记录: |