Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

補充 Paul 理解的 IoC 和 Temporal Coupling #4

Open
ctwdtw opened this issue Jan 28, 2021 · 0 comments
Open

補充 Paul 理解的 IoC 和 Temporal Coupling #4

ctwdtw opened this issue Jan 28, 2021 · 0 comments

Comments

@ctwdtw
Copy link

ctwdtw commented Jan 28, 2021

剛剛再去看了一下 IoC 和 Temporal Coupling:

Inversion of Control:

“The term Inversion of Control originally meant any sort of programming style where an overall framework or runtime controlled the program flow.”—Dependency Injection: Principles, Practices, and Patterns by Mark Seemann & Steven van Deursen

用自己的話講:

  1. 不是你的 code, 是別人的 code 決定 code 的 flow, 就叫做你的 control 被 invert 了。
  2. 例子: UIKit 的 life cycle 決定接下來你寫的哪行 code 會接著被執行。

Temporal Coupling:

“Temporal Coupling is a common problem in API design. It occurs when there’s an implicit relationship between two or more members of a class, requiring clients to invoke one member before the other. This tightly couples the members in the temporal dimension.”—Dependency Injection: Principles, Practices, and Patterns by Mark Seemann & Steven van Deursen

用自己的話講:

  1. code 要經由特別的順序被執行, 否則會出錯, 就叫做有 temporal coupling。
  2. 我們在寫測試的時候,如果測試的每一行有執行順序的要求的話 (例如稍微換 when 區塊的兩行程式碼, 測試就會崩潰),test case 就有所謂的 temporal coupling.
  3. 因為 UIKit 的 IoC 特性 (UIKit call your code , not your code call UIKit),
    所以我們的測試必須按照順序去 call sut.loadViewIfNeeded 和其他 UIKit 提供的 func (根據我們對 UIKit 的知識), 才能模擬 UIkit 的行為, 所以我們的測試就有 temporal coupling 了。
  4. 為了避免 3. 這種不好的 test case 的 smell, 老師在課堂中給了一些建議 (具體忘了...要去複習...orz.)

以上是我的理解, 大家可以補充或 debug XD.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant