rails:保持干燥,到什么程度?

rails: keep it DRY, to what level?

我们总是读到人们说 "keeps things dry" 和 rails。但是到什么程度呢?

例如,我们有 3 个模型 ProjectOfferRevision。这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

确保您的代码易于遵循,然后进行重构和干燥。