java - CRUD架构设计-反序列化

标签 java serialization architecture

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

ProductRepository -> database communication

ProductService -> business logic

ProductController -> API Routes

ProductDeserializer -> Create new Product from API object

ProductSerializer -> Create API object from Product

产品流程的创建如下:

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)的论据:

  • 职责是共享的,反序列化器确保格式,服务添加业务逻辑和验证。
  • 获得组装零件的汽车工厂是否会重建和改造所有零件?不,它只是验证它们并组装它们。

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

最佳答案

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

我认为执行#1 的唯一原因是当您有不同的服务对象并且在保存之前以某种方式对其进行处理时(可能基于调用者是移动设备与桌面浏览器等)。在这种情况下,取消序列化的产品将与保存的产品不同,您可能需要进行复制。

关于java - CRUD架构设计-反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590912/

相关文章:

java - Hazelcast 锁 - 实例死亡

java - 对象中对象的反序列化抛出 ClassNotFoundException

java - 当只有子类实现可序列化时,序列化如何工作

.net - 用于批处理的 Azure Windows 服务

java - Spring异常处理生产与开发

java - 在单个方法中重用连接对象

java - 家庭作业! ObjectInputStream(new FileInputStream ("filename") 永远不会停止读取

architecture - 为什么 Repository Pattern 的例子从不处理数据库连接异常?

architecture - 预先生成资源表示

java - 如何将数据放入XML的ListView中?