考虑“入门”指南中的这个片段:
module Web::Controllers::Books
class Create
include Web::Action
expose :book
params do
param :book do
param :title, presence: true
param :author, presence: true
end
end
def call(params)
if params.valid?
@book = BookRepository.create(Book.new(params[:book]))
redirect_to '/books'
end
end
end
end
注意 和 上的验证title
,author
它们存在于控制器操作中。我的问题是:为什么这些验证是在动作参数上而不是在Book
实体上?也就是说,假设验证是on Book
,您可以编写如下内容:
def call(params)
book = Book.new(params)
if book.valid?
@book = BookRepository.create(Book.new(params[:book]))
redirect_to '/books'
end
end
并完全摆脱params
障碍。这对我来说似乎更自然,并且会促进在不同操作中更容易地重用验证。
params
我没有看到的方法有优势吗?将验证放在Book
实体上是否有缺点?