2012-07-17 55 views
0

我对MVC框架有点新,需要知道什么是使用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,并在该类我使用的是宝石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? (请注意,我一直在阅读的内容是,在模型类中放置太多功能令人不悦),并且将来所有的功能(如清理消息描述,去除特定标签等)都会在模型类中进行编码,而后者又会变得越来越大。

回答

1

的方法应该留在FeedReader,但你可能从传递NewsFeed实例(或集合,它可以处理NewsFeed实例的列表),以从饲料中提取信息的方法中受益(我不知道名字read在这方面非常好)。

你们记住,有Atom和RSS提要。你不应该将你的代码焊接到其中一种格式。相反,你应该能够使用多态性来处理两者(如果需要的话)。

至于SRP:实际上它最好的解释是,我听说过 - 类应该只有一个理由来改变

+0

谢谢!所以如果在某些时候我改变了我的数据库模式,这反过来又要求我改变feedreader类,那么这不会被认为是一个糟糕的设计? – samach 2012-07-17 11:27:56

+0

只有当您的读者直接访问'NewsFeed'的变量(这意味着打破封装)。 – 2012-07-17 11:32:00

2

有几个意见。这是我的:你做对了。有一种叫做“简单责任原则”的东西,这种说法近来很流行,但仍然有价值:你的物体应该做一件“事情”,并且做得很好。因此,有一个类处理新闻提要,一个处理新闻检索,这对我来说是完全有意义的。

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

相关问题