2011-06-07 86 views
2

我正在構建一個RSS客戶端並使用Argotic framework。它爲Atom,RSS和OPML等不同種類的Feed提供了不同的類別。這些類不會從任何其他類繼承,並且不會實現訪問其屬性的通用接口。如何處理具有不同屬性的類似對象?

有一個GenericSyndicationFeed類型,實現重載的方法,您可以傳入AtomFeedRssFeed。如果我想使用「更多」強類型的類,我實際上需要兩個代碼路徑(一個用於Atom,另一個用於RSS)在我的程序中的任何地方。顯然,我不打算這樣做。

除API文檔以外沒有其他作者的文檔,所以我很遺憾,爲什麼它是以這種方式實現的,而不是充分利用完整的類。有一件令我困擾的事情是,當使用GenericSyndicationItem類型時,我無法得到某個項目的作者。

我能在這裏做什麼?做一個包裝類?或繼承RssFeedAtomFeed類並實現一個接口來公開我認爲應該類似於兩者的屬性?

回答

3

當您使用第三方庫時,庫不符合您的架構需求:adapt!但是如何?

你已經確定你的一些選項,並有多種:

  1. 包裝現有的在新的類中使用Adapter Pattern
  2. 擴展並通過實現一個共同的接口
  3. 重構統一不同類的類要使用的原始代碼Polymorphism本地

如果現有的類根本沒有共同的基類,那麼前兩個選項都是大致相同的工作量。如果您決定切換到不同的框架,包裝具有稍鬆散耦合的優勢。擴展避免了許多代碼,如adaptee.AdapteeMethod,因爲您可以在不指定實例的情況下調用基本方法。在這種情況下,我會傾向於適配器模式,除非可以通過繼承利用至少一些公共基類。

最後一個嚴肅的選擇是重構代碼以使其更加面向對象,如果您打算回饋項目並獲得項目作者的祝福,我只推薦這種方法。原因是你有工作代碼,你可能不完全理解和搞亂它只是冒險打破它。保留工作代碼並從外部調整它。

2

它已經因爲我寫Argotic(這是寫在之前存在的.NET System.ServiceModel.Syndication)很長一段時間,但由於筆者的概念,既RSS 2.0Atom存在,我真的不記得爲什麼這種類型的饋項目不包含Authors集合。這可能是因爲OPML文檔中的大綱元素沒有作者的概念。顯然,我的設計很差。底線是我還年輕,學習和Argotic雖然有用,當它寫在3年前;非常需要進行重大的重構。如果System.ServiceModel.Syndication能滿足您的需求,我建議你用它來解析您的聯合供稿。

既然你有完整的源代碼,以Argotic,它沒有履行你的需求;你可以添加一個作者集合通用聯合項目類和消費RSS或Atom飼料時填充它。

你最肯定有我的祝福重構,你認爲合適不管你是否有助於回來,我項目責任年前冒充,我不相信這是這些天什麼狀態。爲回答

RssFeed feed = RssFeed.Create(new Uri("http://www.pwop.com/feed.aspx?show=dotnetrocks&filetype=master")); 

AtomFeed feed = AtomFeed.Create(new Uri("http://news.google.com/?output=atom")); 
+0

感謝:

那說和做,如果你知道之前的消費資訊提供的格式,你可以做以下。 Argotic很好,我認爲我可以讓它工作,它仍然是阻力最小的路徑。我很年輕,也學習(使用Argotic作爲團體項目),所以我們拭目以待。 System.ServiceModel.Syndication吮吸,因爲它太容易失敗開箱的閱讀飼料。編寫/創建格式良好的Feed可能會更好。 – Pete 2011-06-07 13:01:13

相關問題