注册
登录
概念模型
业务代码编程陷阱案例
返回
业务代码编程陷阱案例(领域驱动设计)
作者:
xinwang_m@163.com
发布时间:
2020-07-20 02:53:39 (4年前)
关键词:
业务代码编程
摘要:
当我们开始编写软件时,我们总是希望有一个好的设计。我们阅读书籍,运用最佳实践,最后,我们常常一团糟。根据我在一家定制软件开发公司的经验,我每天必须处理此类代码,尤其是在某些旧系统上工作时。
当我们开始编写软件时,我们总是希望有一个好的设计。我们阅读书籍,运用最佳实践,最后,我们常常一团糟。根据我在一家定制软件开发公司的经验,我每天必须处理此类代码,尤其是在某些旧系统上工作时。 造成这种情况的原因多种多样,我将尝试在一系列文章中以一些实际的方式来探讨其中的一些原因。在我的第一个示例中,我将说明为什么简单的软件会演变成一场噩梦,并建议进行一些改进。我将只专注于处理业务逻辑的服务层。 让我们从一个简单的存储应用程序开始。我们拥有带有服务,存储库的产品资源,并且我们可以执行我们认为需要的CRUD操作。我们的产品服务如下所示: public class ProductService { public String create(Product product) { return productRepository.create(product); } public String update(Product product) { return productRepository.update(product); } public Product get(String productId) { return productRepository.get(productId); } public void delete(Product product) { productRepository.delete(product); } } 还会有其他一些东西,例如DTO到实体的映射,控制器等。但是正如我所说的,我们将考虑将它们编写为简化起见。我们的产品实体是简单的Java Bean,我们的存储库保存在正确的数据库表中。然后,我们得到另一个要求,即我们还将创建一个在线商店,并且需要一种下订单的方法。因此,我们添加了快速订购服务来满足我们仍然很简单的要求: public class OrderService { public String saveOrder(Order order) { return orderRepository.save(order); } } 它简单,易读且有效!然后,下订单时就需要更新库存中的产品的新要求。我们这样做: public class OrderService { public String saveOrder(Order order) { Product product=productService.get(order.getProductId()); product.setAvailableQuantity(product.getAvailableQuantity()-order.getQuantity()); productService.update(product); return orderRepository.save(order); } } 我们又碰到三个新需求: 我们需要致电运输服务将该产品运送到一个地址 如果没有足够的库存来履行订单,则抛出一个错误 如果产品的可用数量低于最低数量以进行重新库存。 结果如下: public class OrderService { public String saveOrder(Order order) { Product product=productService.get(order.getProductId()); //The order service works more like a product service in the following liness if(product.getAvailableQuantity()
quantity){ this.reservedQuantity+=quantity; } else throw new ProductReservationException(); } public releaseReserved(int requested){ if(this.reservedQuantity>=requested){ this.reservedQuantity-=requested; this.availableQuantity-=requested; } else throw new ProductReservationException(); } public boolean needsRestock(){ return this.availableQuantity
quantity){ this.reservedQuantity+=quantity; } else throw new ProductReservationException(); } public releaseReserved(int requested){ if(this.reservedQuantity>=requested){ this.reservedQuantity-=requested; this.availableQuantity-=requested; } else throw new ProductReservationException(); } public boolean needsRestock(){ return this.availableQuantity
收藏
举报
0 条回复
动动手指,沙发就是你的了!
登录
后才能参与评论