我有以下3个课程:
基
module TitleSource
class Base
include Comparable
attr_accessor :company
attr_accessor :priority
attr_accessor :target_title
def initialize(args={})
self.company = args[:company]
self.priority = args[:priority]
self.target_title = args[:target_title]
end
def create_contact_source
raise NotImplementedError
end
def <=>(other)
fetch_value <=> other.fetch_value
end
protected def fetch_value
value
end
private def value
raise NotImplementedError
end
end
end
UnmatchedTitle
module TitleSource
class UnmatchedTitle < Base
def create_contact_source
::ContractorUi::ContactSource.generate_from_unmatched_title(self)
end
private def value
100
end
end
end
IncompleteContact
module TitleSource
class IncompleteContact < Base
attr_accessor :target_title_name
attr_accessor :contact
def initialize(args={})
super
self.target_title_name = args[:target_title_name]
self.contact = args[:contact]
end
def create_contact_source
::ContractorUi::ContactSource.generate_from_incomplete_contact(self)
end
private def value
10
end
end
end
我目前正在阅读POODR,并想出了这个设计,到目前为止我一直都很好。
但是,出于教学原因,我想知道如果它值得,我应该如何删除对::ContractorUi::ContactSource
的依赖以及是否应该这样做。
我不喜欢用构造函数传递它的想法,因为TitleSource
模块的整个目的是实际生成ContactSource
,但是希望听到更有经验的人的意见。阅读这本书(以及一些现场经验)让我了解脱钩有多重要
答案 0 :(得分:0)
我可以确认,在这种情况下,只有一个依赖关系不是一个大问题。基于POODR,这段代码可以很好地对变化作出反应,因此在这种情况下保持类依赖性是好的,特别是考虑到它是整个类的主要目的,生成ContactSource
的实例