【发布时间】:2012-05-29 20:16:32
【问题描述】:
我正在使用 Spring 3.1 / Hibernate / Jackson 创建一个 Restfull API 服务器。
我有一个“购买”控制器/模型/Dao。
我现在需要添加“标记”购买的功能。
因此,一个带有“tagId”和“tagName”的简单类链接回“Purchase”。
一个“Purchase”可以有多个“Tags”,一个“Tag”只能属于一个“Purchase”。
表示我必须添加的这个新的“标签”类的最佳方式是什么? IE。
- 我是否应该将 purchaseId 属性添加到“标记”模型并以某种方式对其进行标注?
- 我是否应该将“标签列表”属性添加到“购买”模型?
- 我要创建一个“Tag”控制器,它是“PurchaseController”的子类吗?
- 等等……
基本上,我正在寻找使用 Spring 进行设计的最佳实践方法。
此外,欢迎对我可以采用的设计模式提出任何建议。
也许装饰者模式在这里适用?
当然,所有购买和标签都必须保存到数据库中。
谢谢
采购总监:
@Controller
public class PurchaseController
{
@Autowired
private IPurchaseService purchaseService;
@RequestMapping(value = "purchase", method = RequestMethod.GET)
@ResponseBody
public final List<Purchase> getAll()
{
return purchaseService.getAll();
}
@RequestMapping(value = "purchase/{id}", method = RequestMethod.GET)
@ResponseBody
public final Purchase get(@PathVariable("id") final Long id)
{
return RestPreconditions.checkNotNull(purchaseService.getById(id));
}
@RequestMapping(value = "purchase/tagged", method = RequestMethod.GET)
@ResponseBody
public final List<Purchase> getTagged()
{
return RestPreconditions.checkNotNull(purchaseService.getTagged());
}
@RequestMapping(value = "purchase/pending", method = RequestMethod.GET)
@ResponseBody
public final List<Purchase> getPending()
{
return RestPreconditions.checkNotNull(purchaseService.getPending());
}
@RequestMapping(value = "purchase", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody final Purchase entity)
{
RestPreconditions.checkRequestElementNotNull(entity);
purchaseService.addPurchase(entity);
}
}
购买模式:
@Entity
@XmlRootElement
public class Purchase implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 6603477834338392140L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Long pan;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public Long getPan()
{
return pan;
}
public void setPan(Long pan)
{
this.pan = pan;
}
}
【问题讨论】:
标签: spring oop design-patterns restful-architecture