2010-11-05 86 views
3

近期風格的代碼比較老式的代碼與方法,有一兩件事立即出現:偶爾的所有方法在同一時間做了一堆東西(我並特別提到了Fortran代碼我現在開放),目前的做法規定你有做事情的方法,以及只是調用做事情的方法的方法。方法是做委託

如何這種風格正式名稱,而那是什麼推動了它的觸發(例如:一個文學論文,圖書館/框架,只是出於自身出現的共識)?

+0

這種類型的設計產生的原因是由於絕大多數人無法正​​確理解14頁長的功能並將其內部的每個部分內化。 – wheaties 2010-11-05 14:30:07

+0

@wheaties:這很明顯,但很顯然很多人都能夠做到這一點,因爲我看過的所有Fortran代碼都採用14頁長的策略。 – 2010-11-05 14:40:02

+0

也許是提供(爲了將來可能的需要)額外的間接級別?這對於制定者/獲得者尤其有效。 – ruslik 2010-11-05 14:45:27

回答

2

我相信這被稱爲「結構化編程」。另外,請查看Structured Analysis

Edsger Dijkstra算法是你的男人在這裏...

+0

這就是爲什麼我不喜歡這種方法! (他也是對抗goto的)。 – ruslik 2010-11-05 14:50:41

1

代表團是可以在很多設計中使用的工具。立即想到的是觀察者模式(在ASP.NET中用於UI事件處理),策略模式 - 可以使用委託來實現......也有更多的負載。

2

幹 - Don't Repeat Yourself和維基百科文章中提到的其他「哲學」在這方面發揮了很大的作用,以及確保每種方法只是做一件事。

+0

我會說更多的「關注點分離」,然後...... – 2010-11-05 14:41:18

+0

@Stefano - 它們都有某種程度的相關性。 DRY和關注的分離都鼓勵創建從不同地方被調用的小方法。 – ChrisF 2010-11-05 14:56:20

1

這一切都發生得太快了,我是不是在一個足夠大的組織,看到發生的一切,但我可​​以告訴你一些技巧的上漲導致了這一點:

  1. 分離的擔憂 。 Foo :: getNeighbor委託給它的成員對象Bar :: getNeighbor委託給它的成員對象Baz :: getNeighbor,這樣如果其中一個變化不是所有其他函數都需要知道它的話。也就是說,如果Baz :: getNeighbor開始接受一個字符串,並且Bar通過「biff」,Foo不知道也不在乎。
  2. 單元測試。打破這些功能,以便能夠更仔細地檢查一小部分邏輯中的錯誤,從而挽回整整一天的工作價值。一個14頁長的函數很難破譯並找出問題出在哪裏。 4線功能要容易得多。
  3. OOP。人們開始將所有東西都推到一個物體上,即使它不需要在物體中。然後再次,一旦找到了平衡點,我們出現了良好的設計模式,事情就有所改善。

天啊,我知道還有更多。就像UML的興起一樣。