0

我对 MVC 框架有点陌生,需要知道使用 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)类一样拥有一个单独的类并在那里有一个读取函数是一个好习惯,还是应该在我的模型类中声明读取函数并删除FeedReader?(因为我一直在读到在模型类中放置太多功能是不受欢迎的!!)并且将来所有的功能(如清理新闻描述、去除特定标签等)都会在模型类中编码,而模型类又会变得越来越大.

4

2 回答 2

2

对此有几种意见。这是我的:你做对了。有一种东西叫做“简单责任原则”,这在当今是一个流行词,但仍然有价值:你的对象应该做一件“事情”,并且把它做好。因此,拥有一个处理新闻提要的类,以及一个处理新闻检索的类,这对我来说完全有意义。

加分点:它(据说)更容易测试。

于 2012-07-17T11:00:21.263 回答
1

该方法应保留在 中FeedReader,但您可能会受益于将NewsFeed实例(或可以处理实例列表的集合NewsFeed)传递给从提要中提取信息的方法(我不确定名称read在这种情况下是否如此好) .

请记住,Atom 和 RSS 提要都有。而且您不应该将您的代码焊接到其中一种格式。相反,您应该能够通过利用多态性同时使用两者(如果需要)。

至于SRP:实际上最好的解释是,我听到的是跟班应该只有一个改变的理由

于 2012-07-17T11:11:04.577 回答