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

review completed. #1

Open
hatelove opened this issue Jan 13, 2017 · 0 comments
Open

review completed. #1

hatelove opened this issue Jan 13, 2017 · 0 comments

Comments

@hatelove
Copy link

測試案例完成地不錯,幾個建議:

  1. public void CalculateSumTest_傳入Null物件會例外錯誤(){}, assert 如果是 exception, expected 就不需要額外寫一個空的,反而是 noise.
  2. public void CalculateSumTest_傳入Null物件會例外錯誤(){} 測試案例是說傳 null 會引發 exception, 但測試程式內容卻是 ShouldNotThrow(), 而且 ShouldNotThrow() 針對 ArgumentOutOfRangeException 更是不知所謂。
  3. production code 的設計,可以參考 sample solution. 可以調整的部分包含:可以用 extension method 針對 IEnumerable<T> 直接擴充,讓用的人更簡單呼叫。另外,這個需求的本質是「分頁取某欄位值總和」,所以使用 LINQ 的 Skip() + Take() + Sum() + yield return 就可以完成。

結論

可以參考一下我的 sample code: https://gist.github.com/hatelove/f5a4c2591293828b637f#file-getsumbypagesize_v2-cs

重點 focus 在下列幾點:

  1. 呼叫端怎麼呼叫最好用, 語意清楚, 參數夠少, intellisense輔助。
  2. API 在需求異動時,能越穩定越好,代表支援有足夠的彈性。在面對重構時,也不會影響到呼叫端的使用,例如 property rename。
  3. 測試案例要怎麼呈現,最像口語化的描述著呼叫端使用情境。包含怎麼寫語意最清楚,寫起來最快。

這個 homework 基本上有四種方式來實作,也考驗著對 C# 的熟悉程度。

  1. 使用 enum, production code 以 if/else 來分辨
  2. 使用 string + reflection 來動態決定使用哪一個 property 加總
  3. 使用 delegate/lambda 針對 Product 型別來處理
  4. 使用 generic 支援泛型,使用 extension method 針對所有集合都提供這樣的功能
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