【发布时间】:2020-03-22 10:45:57
【问题描述】:
我正在使用应用程序为我的graphql-ruby 编写一个基于devise-jwt 的身份验证系统。在这个过程中,我为创建一个新的用户帐户做了一个突变,它需要 7 个参数,这在我的代码中创建了很多重复:
module Mutations
class SignUpMutation < Mutations::BaseMutation
argument :email, String, required: true
argument :password, String, required: true
argument :family_name, String, required: true
argument :family_name_phonetic, String, required: true
argument :given_name, String, required: true
argument :given_name_phonetic, String, required: true
argument :newsletter_optin, Boolean, required: false
field :token, String, null: true
field :user, Types::UserType, null: true
def resolve(email:, password:,
family_name:, family_name_phonetic:,
given_name:, given_name_phonetic:,
newsletter_optin:
)
result = {
token: nil,
user: nil
}
new_user = User.new(
email: email,
password: password,
family_name: family_name,
family_name_phonetic: family_name_phonetic,
given_name: given_name,
given_name_phonetic: given_name_phonetic,
newsletter_optin: newsletter_optin
)
if new_user.save!
result[:token] = new_user.token
result[:user] = new_user
end
result
end
end
end
我怎样才能干掉它以避免在整个地方重复突变参数的名称?
提前谢谢你!
【问题讨论】:
-
通常当人们提到 DRY 时,它是关于不重复知识。变量名出现的次数不一定是个问题。如果您看到在多个不同的文件中声明了相同的函数,或者在多个不同的地方声明了相同的常量生活,则不是 DRY。该常数应该有一个具体的来源。虽然您可能会觉得这很烦人,但我实际上并没有发现这段代码有问题。
-
@unflores 说得有道理,我觉得很奇怪,因为 Ruby 让我习惯了更简洁的代码,所以无法绕过这种冗长:) 感谢您的反馈!
-
老实说,过去我花了很多时间试图通过某种元编程来消除重复,结果却发现我无法搜索它。有很多情况可以保持 DRY,但有时更多的代码是正确的答案。 /耸肩
标签: ruby-on-rails ruby graphql