Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

ActiveRecordモデルが太すぎるのはいつですか?

Railsのブログや本を読んだり、会議の講演を見たりすると、モデルをよりスリムにすることについて多くのことを学ぶことができます。

モデルがなるので、これらのテクニックは素晴らしいです 大きくなりすぎたり、複雑になりすぎて処理できなくなります。しかし、永続性、関連付け、および検証のみをモデルに任せることを本当に望んでいますか? とにかく、ActiveRecordモデルに保持するロジックの量をどのように決定しますか?

スキニー。しかし、あまりにも スキニー。

Active Recordは、モデルがデータベーススキーマと厳密に一致する場合に最適に機能するパターンです。それがそのために設計されたものです! しかし、それはどういう意味ですか?

  • 一部のコードがActiveRecordモデルの観点から機能する場合、そのコードはモデルに組み込まれる可能性があります。

  • 複数のテーブル/オブジェクトにまたがるコードが機能し、実際には明確な所有者がいない場合、そのコードはサービスオブジェクトに入る可能性があります。

  • 属性のようなもの(関連付けやその他の属性から計算された属性など)は、ActiveRecordモデルに入れる必要があります。

  • 複数のモデルの保存または更新を一度に調整する必要があるロジックがある場合は、ActiveModelフォームオブジェクトに入れる必要があります。

  • コードが主にビューでモデルを表示またはフォーマットすることを目的としている場合は、Railsヘルパーまたはプレゼンターに配置する必要があります。

これらのガイドラインを超えて、大きくなりすぎているクラスをリファクタリングするために使用するのと同じルールを使用する必要があります。ただし、一般的に、一部を残すことについて悪く感じることはありません。 ActiveRecordモデルのロジック。彼らはそれを持っていることを意図しています!

したがって、RailsはActive Recordパターンを選択したので、モデルにいくつかのロジックを含めることは理にかなっています。しかし、なぜRailsはよりクリーンなものではなくそのパターンを選んだのですか?

Rubyは何をしますか?

エンタープライズアプリケーションアーキテクチャのパターンでは、ActiveRecordパターンがRowDataGatewayとDataMapperの中間に位置します。 行データゲートウェイ は、可能なすべてのモデルの中で最も細いもののように、テーブル行の周りのほとんどダムオブジェクト指向のラッパーです。 データマッパー Active Recordsよりも複雑で、主にビジネスロジックのみを含むオブジェクトと永続ロジックのみを含むオブジェクト間の変換に使用されます。

したがって、Rubyのコンテキストでは、ActiveRecordは絶対に正しいデフォルトパターンです。

なぜ私はそれを言うのですか?

Rubyはプログラマーを幸せにするように設計されています。清潔さと利便性の間でトレードオフを強いられる場合、ほとんどの場合、利便性を選択します。

つまり、Array パブリックAPIには100を超えるメソッドがあります。 トンがあります 相互の単なるエイリアスであるメソッドの。一部の開発者は.detectを書くことを好むからです .findへ 。

その文脈では、Railsがデフォルトで、より柔軟なパターンよりも便利なパターン、またはよりオブジェクト指向の純度を持つパターンに設定されることは非常に理にかなっています。それはRubyのやり方です。そして、私はそれが大好きです。

必要なときに、いつでもより柔軟なものにリファクタリングできます。しかし、もう一度、YAGNI。


  1. Djangoでのモデルデータのエクスポート

    この記事では、モデルデータを.csv形式でエクスポートする方法を説明します。場合によっては、モデルデータを .csvなどのさまざまな形式でエクスポートする必要があります。 またはjson または.xlsx さらなる作業または報告のため。ある種のスクリプトを作成することでこれを行うことができますが、私にはそれを行うためのより良い方法があります。 Djangoプロジェクトを作成し、アプリを追加します。 URLを設定する INSTALLED_APPSにアプリを追加するなどの基本的な操作を行います。 モデルを作成します。ここでは、 views.py、urls.pyとはあまり関係がありません。 ま

  2. PythonのTensorflowでシーケンシャルモデルを使用する必要があるのはいつですか?例を挙げる

    シーケンシャルモデルは、レイヤーのプレーンスタックがある場合に関連します。このスタックでは、すべてのレイヤーに1つの入力テンソルと1つの出力テンソルがあります。モデルに複数の入力または複数の出力がある場合は適切ではありません。レイヤーを共有する必要がある場合は適切ではありません。レイヤーに複数の入力または複数の出力がある場合は適切ではありません。非線形アーキテクチャが必要な場合は適切ではありません。 Tensorflowは、Googleが提供する機械学習フレームワークです。これは、Pythonと組み合わせて使用​​されるオープンソースのフレームワークであり、アルゴリズム、深層学習アプリケーシ