1

私は初めての Ruby on Rails プロジェクトに取り組んでおり、現在、設計上のジレンマに直面しています。私はプロのプログラマーではないので、かなり基本的なことを見逃しているかもしれません。我慢してください。

私のプロジェクトは、選挙制度のシミュレーターです。私は(とりわけ)これらのモデルを持っています

class Town < ActiveRecord::Base
  attr_accessible :census, :name
  has_many :results
  has_many :parties, :through => :results
  belongs_to :region
end

class Party < ActiveRecord::Base
  attr_accessible :acronym, :name
  has_many :results
  has_many :towns, :through => :results
end

class Result < ActiveRecord::Base
  attr_accessible :party, :town, :votes, :year
  belongs_to :town
  belongs_to :party
end

両方のクラスTownPartyメソッドseats()があり、座席を計算するアルゴリズム ( from:censusまたは from :votes、それぞれ) は本質的に同じです。どちらにも適用できる方法でアルゴリズムをコーディングできるようにしたいと考えています。

私はさまざまな解決策を考えました:

  • ジェネリック関数をコーディングし、目的のクラスへのポインターを渡します。これには、あるケース:censusでは別のケースであるという問題が:votesあります.RoRでこれを管理するのがどれほど簡単かはわかりません. 列へのポインタも渡すことはできますか? ルビーっぽくもありません。
  • アルゴリズムが定義されている共通クラスから継承します。次に、実際には非常に便利な ActiveRecord 機能を失います。それとも私ですか?
  • 一般的なアルゴリズムを作成し、それに応じてクラス固有のメソッドからデータの生配列をフィードします。これは、各クラスのデータ インターフェイスを個別にコーディングする必要があることを意味します。

ソリューションがスケーラブルであることを望みます。つまり、いつの日か、町のコレクションである「地域」と、パーティーのコレクションである「連合」で機能するようにしたいです...

これらのオプションのいずれかを実装しますか? それぞれの長所/短所は何ですか? この問題に対する標準的なアプローチはありますか?

4

0 に答える 0