我对MVC框架有点新意,需要知道使用它时的最佳做法。
我有一个名为NewsFeed的模型类,其中包含news_title,news_publish_date,news_url等字段。
class NewsFeed < ActiveRecord::Base
attr_accessible :description, :feed_id, :link, :publish_date, :title
def save_news_info(feed_id, news_title, news_link, news_publish_date, news_description)
self.feed_id = feed_id
self.title = news_title
self.link = news_link
self.publish_date = news_publish_date
self.description = news_description
end
end
任务是读取RSS源并收集它包含的所有新闻,所以我创建了一个名为FeedReader的类,在该类中我使用gem feedzirra来解析源链接
class FeedReader
attr_accessor :title, :url, :publish_date, :news_array
def initialize(feed_url)
@url=feed_url
end
def read
feed = Feedzirra::Feed.fetch_and_parse(@url)
@title = feed.title
@url = feed.feed_url
@publish_date = feed.last_modified
end
end
我的问题是,如果这是一个很好的做法,就像模型(NewsFeed)类一样有一个单独的类并且在那里有一个read函数,或者我应该在我的模型类中声明read函数并删除FeedReader? (警告我一直在阅读,在模型类中放置过多的功能是不受欢迎的!!)并且将来所有功能(如清理新闻描述,剥离特定标签等)都会在模型类中进行编码,而模型类又会变得越来越大
答案 0 :(得分:2)
对此有几点看法。这是我的:你正在做正确的事。有一种叫做“简单责任原则”的东西,这种说法近来有点流行,但仍然有价值:你的对象应该做一件“事情”,做得好。因此,有一个类用于处理新闻源,另一个用于处理新闻检索,这对我来说是完全合理的。
奖励点:它(据说)更容易测试。
答案 1 :(得分:1)
该方法应保留在FeedReader
中,但您可以将NewsFeed
实例(或可以处理NewsFeed
个实例列表的集合)传递给提取的方法,来自Feed的信息(我不确定名称read
在这种情况下是否如此优秀。)
你要记住,有Atom和RSS提要。并且您不应该将代码焊接到其中一种格式。相反,你应该能够通过利用多态来兼顾两者(如果需要)。
对于SRP:实际上是对它的最好解释,我听说过 - 类应该只有一个原因需要改变。