我正在处理我的第一个 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()
,计算座位的算法(从:census
或从:votes
,分别)将基本相同。我希望能够以适用于任何一种的方式对算法进行编码。
我想到了各种解决方案:
- 编写一个通用函数并将其传递给所需类的指针。这有一个问题是,在另一种情况
:census
下是:votes
,我不知道在 RoR 中管理它有多容易。我也可以将指针传递给列吗?这听起来不太像Rubyish。 - 从定义算法的公共类继承。然后我会失去实际上非常方便的 ActiveRecord 功能。或者我会?
- 创建一个通用算法并相应地从特定于类的方法中为其提供原始数据数组。这意味着我必须分别为每个类编写数据接口。
我希望解决方案具有可扩展性,即有一天我希望它适用于将成为城镇集合的“区域”,以及将成为各方集合的“联盟”......
你会实施这些选项中的任何一个吗?他们每个人的优点/缺点是什么?有没有解决这个问题的标准方法?