我在我的 Rails 项目中使用 Draper gem 来获取装饰器模式功能。我认为 gem 将通过分离模型逻辑和视图逻辑来帮助提高我的工作效率。但是整个工作流程变得可怕。我应该始终将 .decorate 添加到每个控制器中的模型中。我的装饰器类是相互之间的委托全网。此外,当我开始使用 ActiveModel 序列化器时,我发现序列化器无法与我的装饰器一起使用。
我不喜欢这种方法并决定不使用单独的装饰器类,而是为每个模型提供装饰器模块。可以吗?这个解决方案可能会出现什么问题?
module UserDecorator
extend ActiveSupport::Concern
included do
def full_name
"{first_name} #{last_name}"
end
end
end
首先,它非常简单。我解决了下一个问题:
我不需要使用装饰继承的模型类。我只是为现有模型类提供装饰器方法。
ActiveSerializer 现在可以使用装饰器方法。
但我觉得这个解决方案有问题。请给我一些批评!