[DAY26] 导入 DDD 时尚未深究的问题

这篇罗列导入 DDD 时遇到的困难,以及针对这些问题,在团队内还没有确切设计共识时,我们的处理方式。

Ransack

Ransack 依赖 ActiveRecord,导致不依赖 ActiveRecord 的 Boxenn 没办法使用。然而,专案中有不少地方使用到 Ransack 方便的 SQL 查询功能,没办法轻易舍弃。

目前的解法是 controller 接到参数後,先利用 model.ransack 拿到 ActiveRecord::Relation,再将其透过 factoryrepository 拿到 entity,另一种处理方式则是有 Ransack 的地方就不再透过 Boxenn 而是 ActiveRecord 拿到物件。

Form Object

原本我们是用 Rails 的 model 直接透过 simple form 产生前端表格,然而很多时候 model 的栏位其实跟网页中想要呈现的表格有落差,例如表格不想要出现某些栏位、某些 model 需要合并起来当一个表格填写等等。

目前的解法是先在 controller 透过 OpenStruct 建立一个物件丢给 simple form 後产生前端表格,但中文化就得要手动调整,不能透过 rails 的 I18n 自动处理。

# controller.rb
class UserController < ApplicationController
  def new
	@user = OpenStruct.new(
	  name: nil,
	  id_number: nil,
	  gender: nil,
    )
  end

  def create
    # 将传入的 params 做处理
  end
end
# new.slim
= simple_form_for @user, as: :user, url: new_user_path, method: :post do |f|
  = render partial: 'form', object: f, as: :f

# _form.slim
= f.input :name, label: '名称'
= f.input :id_number, label: '身分证字号'
= f.input :gender, label: '性别', as: :select, collection: [['男', :male], ['女', :female], ['其他', :other]], input_html: { 'data-select': true }
= f.submit '确定',  class: 'btn btn-success'
= button_to '取消', homepage_path, class: 'btn-muted'

下一篇会来说说除了实作外,我们在开发流程中做的变化。


<<:  Day 27 - [Android APP] 05-API与物件

>>:  Day26:TabView

Day14 - 使用 Kamigo 进行权限控管

GitHub 网址:https://github.com/ Kamigo 说明文件:https:/...

Python 演算法 Day 7 - 理论基础 统计 & 机率

Chap.I 理论基础 Part 4:统计 & 机率 Analyze the data th...

JS 31 - 一个 div 就能安心输入的表单检查提示!

大家好! 今天要实作的是表单的输入提示。 我们进入今天的主题吧! 程序码 const input =...

30-2 之软件架构设计原则 1 - SRP 单一职责原则

软件架构设计原则 1 - SRP 单一职责原则 在软件设计有个 『 SOLID 原则 』的几个原则,...

Day 06 Interrupts for controlling peripherals

Utilize Mbed API to implement interrupts Purpose o...