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(),计算座位的算法(从:census或从:votes,分别)将基本相同。我希望能够以适用于任何一种的方式对算法进行编码。

我想到了各种解决方案:

  • 编写一个通用函数并将其传递给所需类的指针。这有一个问题是,在另一种情况:census下是:votes,我不知道在 RoR 中管理它有多容易。我也可以将指针传递给列吗?这听起来不太像Rubyish。
  • 从定义算法的公共类继承。然后我会失去实际上非常方便的 ActiveRecord 功能。或者我会?
  • 创建一个通用算法并相应地从特定于类的方法中为其提供原始数据数组。这意味着我必须分别为每个类编写数据接口。

我希望解决方案具有可扩展性,即有一天我希望它适用于将成为城镇集合的“区域”,以及将成为各方集合的“联盟”......

你会实施这些选项中的任何一个吗?他们每个人的优点/缺点是什么?有没有解决这个问题的标准方法?

4

0 回答 0