假設業務層被Web使用,並且一些業務層的功能也作爲REST Web服務向公衆公開。在哪裏做輸入驗證
您會對錶示層(Web或REST Web服務)或業務層的業務邏輯進行輸入驗證,並在表示層捕獲驗證錯誤(由業務層拋出)嗎?
(尤其是Spring框架在使用中)
假設業務層被Web使用,並且一些業務層的功能也作爲REST Web服務向公衆公開。在哪裏做輸入驗證
您會對錶示層(Web或REST Web服務)或業務層的業務邏輯進行輸入驗證,並在表示層捕獲驗證錯誤(由業務層拋出)嗎?
(尤其是Spring框架在使用中)
如有疑問,這是一般更好地把業務邏輯(包括輸入驗證邏輯)在業務層,因爲
咕d框架將允許您在一個共同的地方定義這樣的邏輯並且支持早期捕獲問題(例如,在表示層中),這通常更直觀(快速失敗),更具可擴展性(前端捕獲它)解決方案。然而,如果你的框架不支持這種功能,你應該更喜歡一致性和可維護性,並將邏輯放在業務層中。
我建議在所有貼圖中實施驗證。我做的用戶界面,所以用戶體驗很高,並有即時反饋。但我從不相信用戶界面提供的數據(認爲禁用JS的用戶)。現在,您的服務器端驗證的詳細程度取決於您。但是,如果可以的話,您希望避免讓用戶不得不經受一次完整的往返服務器。
+1「永遠不要信任UI提供的數據」。 – 2011-01-09 20:57:53
業務層中應始終存在違反業務規則的情況。無論您是否允許進行主動檢查,都是一項設計決定,您是否希望對客戶進行急切檢查以避免往返。
感謝您指出這些凱利。我同意這些問題,但我認爲,我可能會在業務層拒絕無效輸入(拋出驗證錯誤等),但是在表示層我可能需要更細粒度的驗證錯誤(字段a和字段b等) )。要做到這一點,我必須把所有的驗證都放在最好的穀物到商業層,然後在表現層中相應地行事,是不是這樣呢?我在春天想,我不知道我找到了一個明確的解決方案。我對春天很陌生,所以我可能會錯過一個觀點。任何澄清是受歡迎的。 – mete 2011-01-09 20:59:57