设计模式 – 服务层方法应该期望实例还是id?

设计模式 – 服务层方法应该期望实例还是id?,第1张

概述这个问题源自我在Grails应用程序上的工作,但它适用于几乎所有在层中开发的Web应用程序.这是一个简单的例子: class OrderService { // Option 1 def shipOrder(Order order) { order.status = OrderStatus.SHIPPED emailService.sendShip 这个问题源自我在Grails应用程序上的工作,但它适用于几乎所有在层中开发的Web应用程序.这是一个简单的例子:
class OrderService {    // Option 1    def shipOrder(Order order) {        order.status = OrderStatus.SHIPPED        emailService.sendShipmentEmail(order)        // ...    }    // Option 2    def shipOrder(long orderID) {        def order = Order.get(orderID)        order.status = OrderStatus.SHIPPED        emailService.sendShipmentEmail(order)        // ...    }}

这些选项中的任何一个都记录为比另一个更好吗?

解决方法 我倾向于选择ID,因为你有时想要使用悲观锁定,然后很容易将Order.get(orderID)更改为Order.lock(orderID).锁定必须在事务中发生,因此使用您在读取后锁定的第一种方法,在中间运行较小的更新风险.

有时需要在服务之外加载实例,例如测试控制器中是否存在,所以第二种方法可以感觉它浪费了数据库调用.但是您可以将get()调用更改为exists()调用并仅检查是否存在ID,而不是仅仅为了查看它是否存在而加载整个实例.

请注意,您应该在方法签名中使用long orderID,因为允许null ID没有意义.

总结

以上是内存溢出为你收集整理的设计模式 – 服务层方法应该期望实例还是id?全部内容,希望文章能够帮你解决设计模式 – 服务层方法应该期望实例还是id?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存