2014-01-29 37 views
0

我有一個USART類,使用tx中斷傳輸數據。 現在我想創建一個使用DMA傳輸數據的變體。 你更喜歡什麼:使用繼承或代碼不同的USART變體

  • 使用繼承來創建兩個USART子類,例如: ISRUSART和DMAUSART?

  • 只實現代碼變體檢查。讓用戶在構造函數中指定是否應該啓用dma,然後在代碼中執行檢查以決定要做什麼(啓用中斷或加載dma)?
+0

繼承是一個不必要的昂貴的* bool *版本。對於客戶端代碼的使用也很痛苦,這將是一個配置設置。如果你不知道哪一個「最好」,那麼客戶程序員怎麼可能知道? –

回答

2

這不能簡單地回答。就像這麼多的設計決定一樣,這是一個「魔鬼在細節中」的例子。所以我在這裏的答案不會是「與解決方案A一起去」或「與解決方案B一起去」,而是「你需要看什麼來決定走哪條路」 - 因爲這也將幫助你不僅僅是直接給出「你應該選擇答案A」,因爲它指導你完成整個過程,你也可以使用這個過程來做出未來的設計決策。

的主要問題是:

  1. 有什麼不同的代碼?

  2. 它將如何使用?

  3. 一種解決方案相對於另一種解決方案的好處是什麼?

  4. 一種解決方案比另一種解決方案有什麼缺點?

您是唯一可以回答這類問題的人,因爲我們沒有您的代碼,而且我們不知道您正在使用的硬件。

爲了澄清上述幾點:

如果「無DMA」「與DMA」之間的代碼差異是很小的,並且可以只用一對夫婦,如果在適當的地方進行補充,那麼這可能正確的解決方案。另一方面,如果有很多地方是完全不同的,那麼顯然這是將代碼分解以使其更加清晰的一個很好的論據。

如何使用代碼也是設計的關鍵問題。您需要確定DMA與中斷選擇的位置和方式,以及它的放置位置。它是一個工廠函數,然後從class BaseSerial初始化正確派生類。也有可能是

「好處vs缺點」可能相當明顯。但是,不知道目前你的代碼是什麼樣的,以及它們之間會有什麼不同,很難說每種選擇都會得到什麼和丟失什麼。

一般來說,擁有一個通用的接口/基類,然後派生類似乎是一個合理的解決方案。但是,如果做得不對,那麼這可能至少與使用「更基本」的方法一樣令人困惑和複雜,並且有兩組代碼。

當然,還必須考慮性能。如果添加額外的圖層(實際上是在代碼中生成的,並且未進行優化),則可能會影響設備的整體性能,就像「if/else」語句不必要一樣。再次,如果不理解實際設計的細節,從性能的角度來看,很難說哪種解決方案更好。

用你認爲合適的解決方案進行試驗並製作一個原型,看看它有多「看起來」和「感覺」,如果可能是正確的,那就去做吧。如果它「感覺不對」,那麼回去看看另一個解決方案。重複,直到你或者想出一個好的解決方案,或者被迫選擇最壞的,因爲你的時間不夠用了......