rails:保持干燥,到什么程度?
rails: keep it DRY, to what level?
我们总是读到人们说 "keeps things dry" 和 rails。但是到什么程度呢?
例如,我们有 3 个模型 Project
、Offer
、Revision
。这3个模型可以有很多Attachment
.
在 "models" 方面很简单,我们最终得到
/app/models/project.rb
/app/models/offer.rb
/app/models/revision.rb
但是对于控制器方面,我在保持干燥方面遇到了问题。我最终至少得到:
GET /projects/:id/attachments -> Projects/Attachments#index
POST /projects/:id/attachments -> Projects/Attachments#create
GET /offers/:id/attachments -> Offers/Attachments#index
POST /offers/:id/attachments -> Offers/Attachments#create
GET /revisions/:id/attachments -> Revisions/Attachments#index
POST /revisions/:id/attachments -> Revisions/Attachments#create
所以基本上,我在这 3 个位置有几乎相同的代码:
controllers/projects/attachments_controller.rb
controllers/offers/attachments_controller.rb
controllers/revisions/attachments_controller.rb
我的问题是,我应该擦干它吗?如何擦干?
DRY 或 "don't repeat yourself" 是一般经验法则。
如果您在代码中发现在多个地方重复出现的模式,可能值得研究一下。
如果可以将通用功能提取到一个模块中,那么您应该这样做。
如果您认为这不值得花时间、太复杂或出于其他原因不去做,那完全没问题。
KISS(保持简单和愚蠢)> DRY
确保您的代码易于遵循,然后进行重构和干燥。
我们总是读到人们说 "keeps things dry" 和 rails。但是到什么程度呢?
例如,我们有 3 个模型 Project
、Offer
、Revision
。这3个模型可以有很多Attachment
.
在 "models" 方面很简单,我们最终得到
/app/models/project.rb
/app/models/offer.rb
/app/models/revision.rb
但是对于控制器方面,我在保持干燥方面遇到了问题。我最终至少得到:
GET /projects/:id/attachments -> Projects/Attachments#index
POST /projects/:id/attachments -> Projects/Attachments#create
GET /offers/:id/attachments -> Offers/Attachments#index
POST /offers/:id/attachments -> Offers/Attachments#create
GET /revisions/:id/attachments -> Revisions/Attachments#index
POST /revisions/:id/attachments -> Revisions/Attachments#create
所以基本上,我在这 3 个位置有几乎相同的代码:
controllers/projects/attachments_controller.rb
controllers/offers/attachments_controller.rb
controllers/revisions/attachments_controller.rb
我的问题是,我应该擦干它吗?如何擦干?
DRY 或 "don't repeat yourself" 是一般经验法则。
如果您在代码中发现在多个地方重复出现的模式,可能值得研究一下。
如果可以将通用功能提取到一个模块中,那么您应该这样做。
如果您认为这不值得花时间、太复杂或出于其他原因不去做,那完全没问题。
KISS(保持简单和愚蠢)> DRY
确保您的代码易于遵循,然后进行重构和干燥。