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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)