CRUD架构设计 - 反序列化

时间:2015-09-15 16:15:37

标签: java serialization architecture

我有一个Java应用程序来对Product对象进行CRUD操作。 架构是:

  

ProductRepository - >数据库通信

     

ProductService - >业务逻辑

     

ProductController - > API路线

     

ProductDeserializer - >从API对象

创建新产品      

ProductSerializer - >从Product

创建API对象

创建产品流程:

  

API - > ProductController - > ProductDeserializer - > ProductService - > ProductRepository

ProductService中的方法创建如下:

1)

public Product create(Product product) {
   validateInput(product);
   Product newProduct = new Product();
   copy(product, newProduct);
   loadBrand(newProduct);
   return productRepository.save(newProduct);
}

问题是:做起来更简单,更好:

2)

public Product create(Product product) {
   validateInput(product);
   cleanupBrand(product);
   loadBrand(product);
   return productRepository.save(product);
}

1)的论点:

  • 服务的责任是创建产品,而不是反序列化程序

2)的论点:

  • 责任是共享的,Deserializer确保格式,服务添加业务逻辑和验证。
  • 汽车制造厂是否给予装配部件重建并重新制造所有零件?不,它只是验证它们并组装它们。

这个例子是简化的,但如果我必须为产品开发复制功能,则需要一些时间来编码和维护,并且似乎重复在反序列化器中完成的工作。

1 个答案:

答案 0 :(得分:1)

如果您只是制作另一份SAME产品,我不会看到您通过创建单独的副本然后保存该副本而获得的任何使用/优势。验证本身应该没问题,所以#2看起来不错。

我认为做#1的唯一原因是你有一个不同的服务对象,并且在获得保存之前会以某种方式处理(可能基于调用者是移动设备与桌面浏览器等)。在这种情况下,去除了deserailzed的产品将与获得保存的产品不同,你可能想要复制。

相关问题