2010-09-15 22 views

回答

10

「簡單過複雜,在複雜度複雜」

所以 - 有隻,如果你是「德平」複雜度的複雜抽象的東西的好處。這樣做的原因可能會有所不同:更好的模塊化,更好的封裝等。

識別抽象是一個雞和雞蛋的問題。爲了減少抽象您需要了解代碼行背後的實際原因。這包括瞭解特定抽象本身的概念(與把它稱爲缺乏理解的抽象原因相反)。這還不夠 - 你需要知道一個更好,更簡單的解決方案來證明它是抽象的。

如果您正在尋找可以在您的位置上使用的工具 - 再也不用關注了,只有頭腦可以可靠地判斷。

+0

」只有頭腦可以可靠地判斷「......至少在未來20年......-) – 2010-09-15 09:04:44

+0

@Martin我不那麼樂觀。將會看到... – 2011-12-26 02:55:45

1

就我個人而言,我會說「什麼是抽象的理想水平?」是一個主觀問題。

我不喜歡爲每個原子操作使用新行的代碼,但我也不喜歡在一行內使用10行嵌套操作。

我喜歡使用遞歸函數,但我並不喜歡遞歸爲了遞歸的緣故。

我喜歡泛型,但我不喜歡(嵌套)泛型函數,例如爲預期的每種特定類型使用不同的代碼...

這是一個個人意見以及常識問題。這回答了你的問題了嗎?

9

我會給出一個答案,會得到很多贊成票!

如果代碼是用OO語言編寫的,它必然會嚴重過度抽象。語言越純粹,問題越嚴重。

抽象應謹慎使用。如果有疑問,總是使用具體的數據結構。 (你總是可以稍後抽象,這比抽象化要容易得多:)

你必須非常確定你在當前的環境中有正確的抽象,並且你必須確信這個概念將經受住變化的考驗。代碼和編碼器的性能都很高。過度抽象的一些弱測試:如果數據結構是產品類型(C語言中的結構)並且程序員已經爲每個字段編寫了get和set方法,那麼他們完全不能提供任何真正的抽象,被禁用的運算符像C增量一樣,沒有目的,並且根本不瞭解結構字段名稱已經是產品的抽象表示。複製和粘貼界面並不是一個好主意。

產品案例的一個好的測試是否存在任何數據不變量來維護。例如,表示有理數的一對整數幾乎就足夠了,幾乎不需要任何抽象,因爲除非分母是零,否則所有對都是有效的。然而,出於性能原因,可以選擇保持不變量,通常要求分母大於零,並且分子和分母是相對的。爲了確保不變量,產品表示被封裝起來:受構造器保護的初始值和受約束以維持不變量的方法。

要解決的代碼,我建議這些步驟:

  1. 文檔的表示不變的抽象是保持

  2. 刪除抽象(方法),如果你不能找到強有力的不變

  3. 使用該方法直接訪問數據來重寫代碼。

此過程僅適用於低級別抽象,即按類別抽取小值。

在較高層次的抽象更難處理。理想情況下,您需要重複代碼,檢查每一步後繼續工作。然而,這將是艱難的,有時需要進行重大改寫,而不是改進。除非抽象基礎太離譜,否則它可能是不值得的,因爲它無法繼續維持它。

+0

這應該被標記爲最佳答案。 – 2014-09-12 19:17:39

2

下載的Magento,有一個看代碼,閱讀它的一些文件,並看看他們的ERD:http://www.magentocommerce.com/wiki/_media/doc/magento---sample_database_diagram.png?cache=cache

我不是在開玩笑,這就是過度取水..試圖取悅每一個人,覆蓋每個基地是一個可怕的想法,使每個人的生活變得非常困難。 「

+0

更新:圖片似乎已經消失。以下是ERD的EAV部分:http://i.stack.imgur.com/sFIJb.png – 2015-07-29 12:53:39

+0

@John_Hunt,我不得不笑。我一直在努力爲Magento創建一個新的自定義主題幾個小時 - 這首先引發了這個線程。你釘了。 Magento不是皇帝的新衣嗎? – dlink 2016-09-26 02:49:17