我對Ruby相當陌生,並且存在代碼組織問題。引用mixin中的類屬性
我有一個叫做Movie的類,它包含一個名爲IMDBMovieInfo
的模塊。
class Movie
include IMDBMovieInfo
attr_accessor :name
attr_accessor :year
attr_accessor :movieID
end
IMDBMovieInfo
有它接受movieID並用它來建立一個IMDB URL的方法:
module IMDBMovieInfo
def imdb_url()
"http://www.imdb.com/title/tt#{self.movieID}/"
end
end
這裏的問題是我不知道我應該被引用在電影類的東西,因爲IMDBMovieInfo
不知道那個類,並且不應該。我可以添加一個電影ID的說法,但後來如果你不知道的電影對象,你會做這一點,這沒有任何意義:
movie = Movie.new("Titanic", "1997", "0120338")
movie.imdb_url(movie.movieID)
什麼是正確的做法組織這個代碼?
你爲什麼要創建IMDBMovieInfo模塊?那些打算使用的地方還有哪些?那些其他類也有一個movieID? – FlyingFoX
@FlyingFoX不,他們可能不會,這就是爲什麼我知道這是一個問題。 IMDBMovieInfo執行與電影對象和IMDB相關的任務。我覺得我不應該用像這樣的額外方法重載Movie類。 – Andrew
安德魯,你是對的,你不應該在模塊中引用類中的對象。它會起作用,但是在其他地方限制了模塊的用處,所以你應該把模塊的內容放在類中。你所需要做的就是把「沒有意義的」改變爲「完美無缺」。 –