私は初めての 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
両方のクラスTown
とParty
メソッドseats()
があり、座席を計算するアルゴリズム ( from:census
または from :votes
、それぞれ) は本質的に同じです。どちらにも適用できる方法でアルゴリズムをコーディングできるようにしたいと考えています。
私はさまざまな解決策を考えました:
- ジェネリック関数をコーディングし、目的のクラスへのポインターを渡します。これには、あるケース
:census
では別のケースであるという問題が:votes
あります.RoRでこれを管理するのがどれほど簡単かはわかりません. 列へのポインタも渡すことはできますか? ルビーっぽくもありません。 - アルゴリズムが定義されている共通クラスから継承します。次に、実際には非常に便利な ActiveRecord 機能を失います。それとも私ですか?
- 一般的なアルゴリズムを作成し、それに応じてクラス固有のメソッドからデータの生配列をフィードします。これは、各クラスのデータ インターフェイスを個別にコーディングする必要があることを意味します。
ソリューションがスケーラブルであることを望みます。つまり、いつの日か、町のコレクションである「地域」と、パーティーのコレクションである「連合」で機能するようにしたいです...
これらのオプションのいずれかを実装しますか? それぞれの長所/短所は何ですか? この問題に対する標準的なアプローチはありますか?