0

私はMVCフレームワークに少し慣れていないので、MVCフレームワークを使用する際のベストプラクティスを知る必要があります。

news_title、news_publish_date、news_urlなどのフィールドを含むNewsFeedというモデルクラスがあります。

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というクラスを作成し、そのクラスでgemfeedzirraを使用してフィードリンクを解析しています。

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

私の質問は、これがmodel(NewsFeed)クラスのように別のクラスを持ち、そこに読み取り関数を持つのが良い習慣であるかどうか、またはモデルクラスで読み取り関数を宣言してFeedReaderを削除する必要があるかどうかです。(モデルクラスに機能を入れすぎるのは嫌だと読んでいます!!)そして将来的にはすべての機能(ニュースの説明のサニタイズ、特定のタグの削除など)がモデルクラスにコード化され、モデルクラスはどんどん大きくなります。

4

2 に答える 2

2

それについてはいくつかの意見があります。これが私のものです:あなたは正しいことをしています。「単純な責任の原則」と呼ばれるものがあります。これは最近の流行語の一種ですが、それでも価値があります。オブジェクトは1つの「こと」を実行し、それをうまく実行する必要があります。したがって、ニュースフィードを処理するためのクラスと、ニュースの取得を処理するためのクラスがあることは、私にとって完全に理にかなっています。

ボーナスポイント:(おそらく)テストが簡単です。

于 2012-07-17T11:00:21.263 に答える
1

メソッドはそのままにしておく必要がありますが、インスタンス(またはインスタンスのリストを処理できるコレクション)をフィードから情報を抽出するメソッドにFeedReader渡すことでメリットが得られる場合があります(このコンテキストで名前が非常に優れているかどうかはわかりません)。 。NewsFeedNewsFeedread

AtomフィードとRSSフィードの両方があることに注意してください。また、コードをいずれかの形式に統合しないでください。代わりに、ポリモーフィズムを利用することで、(必要に応じて)両方で作業できるはずです。

SRPに関しては、実際にそれについての最良の説明は、私が聞いたことは次のとおりです-クラスには変更する理由が1つだけあるはずです。

于 2012-07-17T11:11:04.577 に答える