我有一个使用文档扫描程序的Rails应用程序(Epson WorkForce 545)。我有两个模型:文档和扫描仪。 我很难确定应该将代码放在实际扫描操作的哪个位置。我最初认为我应该在Scanner模型中使用 scan 方法来存放代码。但是,根据我的阅读,我应该只在模型中保留与数据库相关的操作(参见Yehuda's answer here)。在模型中使用扫描仪逻辑似乎违反了这个想法。
然后我想我应该创建一个名为ScannerUtilities的模块并将其放在/ lib文件夹中。我认为这样可行,但是如果将与模型密切相关的代码卡在/ lib文件夹中,是否有意义?此外,由于扫描仪用于创建Document对象,我正在从Document控制器调用 scan 方法。因此,代码涉及多个模型和控制器。
从我的OO思想来看,应该将对象的作用定义为该类的方法。因此,如果扫描仪扫描,扫描方法是否应该在扫描仪模型中?
放置此代码的最佳位置在哪里?
谢谢!
答案 0 :(得分:2)
你是对的,scan method
应该在扫描仪类中,原因如下:
所以是的,我会把scan method
放在canner模型中。
答案 1 :(得分:0)
我会支持混合"方法
考虑创建一个用于执行扫描的类,但通过扫描仪模型访问它:
class Scanner
def scan
ScanExecutor.new(scanner: self).call
end
end
这既满足了扫描仪的自然方法,也扫描了扫描仪的功能,以及实用程序与模型的分离,这将防止您的脂肪模型变得肥胖。
它还鼓励定义扫描操作的良好代码,因为它不必被压缩到单个方法中,而是可以是一个结构良好的类。