Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails设计困境:相同的算法,不同的类_Ruby_Ruby On Rails 3_Pointers_Multiple Inheritance - Fatal编程技术网

Ruby Rails设计困境:相同的算法,不同的类

Ruby Rails设计困境:相同的算法,不同的类,ruby,ruby-on-rails-3,pointers,multiple-inheritance,Ruby,Ruby On Rails 3,Pointers,Multiple Inheritance,我正在进行我的第一个RubyonRails项目,现在我面临着一个设计难题。我不是专业的程序员,所以我可能会错过一些基本的东西。请容忍我 我的项目是模拟选举制度。我有(除其他外)这些模型 class Town < ActiveRecord::Base attr_accessible :census, :name has_many :results has_many :parties, :through => :results belongs_to :region end

我正在进行我的第一个RubyonRails项目,现在我面临着一个设计难题。我不是专业的程序员,所以我可能会错过一些基本的东西。请容忍我

我的项目是模拟选举制度。我有(除其他外)这些模型

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
class-Town:结果
属于:地区
结束
类Party:结果
结束
类结果
城镇和政党这两个类别都将有一种方法席位(),计算席位的算法(分别来自
:人口普查
:投票
)基本相同。我希望能够以一种可以应用于任何一种情况的方式对算法进行编码

我想到了各种解决办法:

  • 编写泛型函数的代码,并向其传递指向所需类的指针。这有一个问题,在一种情况下是
    :普查
    ,在另一种情况下是
    :投票
    ,我不知道在RoR中管理它有多容易。我也可以传递一个指向该列的指针吗?听起来不太红
  • 从定义算法的公共类继承。然后我就失去了ActiveRecord的功能,它实际上非常方便。或者我会
  • 创建一个通用算法,并相应地从特定于类的方法向其提供原始数据数组。这意味着我必须为每个类分别编写数据接口
我希望解决方案是可扩展的,也就是说,有一天我希望它能为“地区”工作,这将是城镇的集合,为“联盟”工作,这将是政党的集合


您会实施这些选项中的任何一个吗?它们各自的优点/缺点是什么?有没有一个标准的方法来解决这个问题

所以,有混合的选择,我不知道。谢谢你的评论。是否有一种方法可以使模块使用:普查或:投票?是的,将所有常用方法移动到一个模块中,然后
包含它们,这是标准做法。理想情况下,模块中的代码应该尽可能地不可知和模块化,以便创建尽可能少的耦合。