1

ドキュメント スキャナー (Epson WorkForce 545) を使用する Rails アプリケーションがあります。Document と Scanner の 2 つのモデルがあります。実際のスキャン操作のコードをどこに置くべきかを判断するのに苦労しています。私は当初、コードを格納するために Scanner モデルにscanメソッドが必要だと考えていました。ただし、私が読んだことから、モデルにはデータベース関連の操作のみを保持する必要があります (イェフダの回答はこちらを参照してください)。モデル内にスキャナ ロジックを配置することは、この考えに違反しているようです。

次に、ScannerUtilities というモジュールを作成し、それを /lib フォルダーに配置する必要があると考えました。それはうまくいくと思いますが、モデルと非常に密接に関係するコードを /lib フォルダーに閉じ込めておくのは理にかなっていますか? また、スキャナは Document オブジェクトの作成に使用されるため、Document コントローラからscanメソッドを呼び出しています。そのため、コードは複数のモデルとコントローラーに関係しています。

私のオブジェクト指向の考え方からすると、オブジェクトが何をするかは、そのクラスのメソッドとして定義されるべきです。では、スキャナーがスキャンする場合、スキャン方法はスキャナー モデルに含まれるべきではないでしょうか?

このコードを配置するのに最適な場所はどこですか?

ありがとう!

4

2 に答える 2

2

そうですscan method、いくつかの理由から、 はスキャナー クラス内にある必要があります。

  • 自然主義: スキャンはスキャナーが行うことです。オブジェクト指向の世界では、スキャナーがあり、その機能の 1 つがスキャンです。
  • ドライ コード: どこからでもスキャン メソッドを呼び出すことができます。コントローラーでは、必要なすべてのコントローラーでそれを複製する必要があります。本当に乾いていない
  • ファット モデル: 「ファット モデル、スキニー コントローラー」パラダイムに従います。このプレゼンテーションをご覧ください。
  • 言語: 慣用的で直感的です。私に同意しない人もいるかもしれませんが、Rails は、Ruby で考えるよりも英語で考えるよう奨励していると思います。話しただけで、スキャナがモノをスキャンするのは明らかです

そうscan methodです、缶詰業者のモデルの内側に入れます。

于 2013-02-13T00:09:31.497 に答える
0

私は「ハイブリッド」方式を支持すると主張します。

スキャンを実行するためのクラスを作成することを検討してください。ただし、スキャナー モデルを介してアクセスします。

class Scanner

  def scan
    ScanExecutor.new(scanner: self).call
  end

end

これは、「スキャナーはスキャンを行うものである」という自然なアプローチと、太ったモデルが肥満になるのを防ぐモデルからのユーティリティの分離の両方を満たします。

また、スキャン操作を 1 つのメソッドに絞り込む必要がなく、適切に構造化された独自のクラスにすることができるという点で、スキャン操作を定義する際に優れたコードを推奨します。

于 2016-12-05T20:58:52.353 に答える