我的代码是:
Assignment Branch Condition size for send_deliverer_push_notification is too high. [16.16/15]
我得到cordova.plugins.notification.badge.set(1);
。
我该如何解决?
答案 0 :(得分:1)
从您的示例中可以清楚地看出,您不需要许多中间变量,因此也不需要分配。构建实际必要代码的所有参数都应该移到一个单独的方法中:
def send_deliverer_push_notification(order_fulfillment, parse_events)
order = Order.find_by(id: order_fulfillment_id)
message = "Order # #{order_fulfillment.order_id} is now ready for pick-up"
ParseHelpers.publish_batching_status(order.user_id, *parse_events, message) do
batching_status_params(order, order_fulfillment)
end
end
def batching_status_params(order, order_fulfillment)
{
shopper_id: order_fulfillment.shopper_id,
role: Shopper.find_by(id: order_fulfillment.shopper_id).roles.pluck(:name).first,
task: order_fulfillment.shopper_status,
batch_id: Batch.find_by(shopper_id: order_fulfillment.shopper_id).id,
fulfillment_number: "#{order.order_number}-#{order_fulfillment.store_id}"
}
end
但是,正如@Sergio Tulentsev向我们详细解释的那样,你应该担心代码的简洁性和可读性,而不是分数。分数可以是发现需要注意的地方的好方法,但它绝不是客观衡量代码质量的方法。
看一下这个例子,它显然过于冗长,并且在关注点分离方面不是很好。这一行:
role: Shopper.find_by(id: order_fulfillment.shopper_id).roles.pluck(:name).first
应该更好地表达为Shopper
这样的方法:
class Shopper < ...
...
def self.role_of(shopper_id)
find_by(id: shopper_id).roles.pluck(:name).first
end
end
然后你可以用更具可读性的
替换那一行role: Shopper.role_of(order_fulfillment.shopper_id)
可以用这一行做类似的事情:
Batch.find_by(shopper_id: order_fulfillment.shopper_id).id
逻辑可以放在OrderFullfillment
的方法中。
按照这种方法,您可以达到一个点,您的代码将包含较小的构建块,可以根据需要轻松组合。这种方法还有其他好处,例如更好的可测试性和潜在的可读性。你应该注意不要采取相反的措施,并将每一行都作为一个单独的方法,因为@Sergio Tulentsev已经警告过我们。
答案 1 :(得分:0)
你必须离开
shopper_id = order_fulfillment.shopper_id
order = Order.find_by(id: order_fulfillment_id)
user_id = order.user_id
role_name = Shopper.find_by(id: shopper_id).roles.pluck(:name).first
batch_id = Batch.find_by(shopper_id: shopper_id).id
message = "Order # #{order_fulfillment.order_id} is now ready for pick-up"
分离方法甚至耦合方法并将其设置为属性
ParseHelpers.publish_batching_status