我有Month
類,其中包含一些數據,例如。 number
,number of days
等。我想簡單地創建這個類實例。我決定創建包含月份數據並返回就緒對象的簡單工廠。我的問題是在哪裏檢查數據的正確性,例如。 1月有31天和其他幾個人...應Month
班檢查數據是否正確或Factory
應該對它負責嗎? (在這種情況下,我們可以創建具有無效數據的Month
對象)...簡單的工廠 - 檢查數據的正確性
0
A
回答
0
Your Month class should check this this itself。擁有僅僅依賴類中的類的邏輯總是最佳實踐。否則,如果其他人使用你的應用程序並在不使用工廠的情況下實例化一個Month對象,它將會起作用,但它不會成爲設計者所期望的。
無論你喜歡它,你都可以處理一個錯誤,但是我會在構造函數中執行它,然後在有人試圖用無效參數實例化時拋出一個錯誤。
0
您應該在將參數傳遞給構造函數之前對其進行驗證。
但是,如果輸入是動態的而不是由您完成的,靜態工廠方法可能不是驗證輸入的最佳位置。
如果你只是想確保,編譯器會發出警告,如果你使用無效的參數,你可以拋出checked異常這樣的:
public static final Month newMonth(int numberOfDays) {
if(numberOfDays > 31 || numberOfDays < 28) {
throw new IllegalArgumentException("invalid numberOfDays");
}
return new Month(numberOfDays);
}
無論哪種方式,在我看來,你不應該去試試... catch方法或讓構造函數驗證任何東西,因爲它會讓你的代碼更不易讀,而且如果你改變你的驗證方法,也可能會破壞很多其他的代碼。
1
請不要重新創建日曆類!有人已經爲你做了。看看Joda-Time或Java 8包java.time。這是學習如何設計類似Month
的好起點。
月和這一天的月份不應該混合在一個類中。因爲一個月有多少天取決於年份和日曆系統。當你從天月的,個月和年創建日期爲無效天數的驗證應該做的。因此它是日期對象的構建過程的一部分。
這看起來很奇怪:
Month january = Month.newMonth(31);
這產生從int
一個Month
對象應該檢查該參數是在從1(1月)到12(12月)範圍,並返回表示一個枚舉工廠方法具體的月份。
這正是我所期望的:
Month january = Month.newMonth(1);
相關問題
- 1. Angularjs測試返回靜態數據的簡單工廠
- 2. 簡單的string.equals工作不正確 - Java
- 3. 如何將此簡單工廠轉換爲工廠方法?
- 4. 使用工廠數據填充控制器的正確方法?
- 5. 簡單的工廠模式演示
- 6. Azure數據工廠的單元測試
- 7. 端點檢查的正確性
- 8. 檢查Python代碼的正確性
- 9. 從工廠返回正確的值
- 10. 正確的phpdoc @return工廠方法
- 11. 正確使用抽象工廠的
- 12. 簡單框架和工廠方法
- 13. 工廠/裝置vs簡單Model.create(...)?
- 14. 使用工具檢查XML模式的正確性
- 15. 簡單的HTML DOM正確
- 16. 數據庫查詢未正確檢索
- 17. 使用構造函數依賴注入檢索文件的簡單工廠
- 18. 角度工廠數據不能正確共享
- 19. 簡單的Assimp程序給出不正確的數據
- 20. 不正確的憑據TADOConnection檢查
- 21. 檢查值正確
- 22. 簡單檢查約束在INFORMATION_SCHEMA.CHECK_CONSTRAINTS中沒有正確顯示
- 23. 如何正確將工廠方法應用於DAO工廠?
- 24. 檢查算法的最小跳轉數的正確性
- 25. 簡單的C#檢查?
- 26. 簡單的在線檢查
- 27. 簡單的Javascript檢查
- 28. 在單元測試中檢查工廠的結果
- 29. 簡單的噴油器參數附加到工廠
- 30. Django:數據工廠