Harry Chang's Blog

Harry會在這分享各種技術心得, 同時也會分享一些敏捷相關的想法與引導方法!

[jQuery] Global Ajax Event Handlers

先前產品自行封裝 Ajax 並實作 Ajax 送出後block UI,當然封裝有他一定的好處, 但是萬一今天我不想用封裝的元件時,我又想要block UI時,寫法就會很麻煩。 可能變成會這樣寫: 1 2 3 4 5 6 7 8 9 10 11 12 13 $.blockUI(LoadingOptions); $.ajax({ ...

[NHibernate] Session Update 奇怪的寫法

最近在做產品的產品,底層是使用NHibernate,Review 時發現同仁在 Update Table 有一些多餘的寫法, 如下: 1 2 3 4 var apply = Session.Get<Apply>("key123"); apply.Usr="Harry"; Session.Update(apply); Session.Flush();...

[Spring.Net] Aop NHibernate Transaction失效了!

今天產品發現NHibernate Session Update 失效了,查了很久發現是我們在Service Layer 的 Aop Transaction 失效了, 導致Load 出來的物件沒有被掛上Proxy ,進一步影響NHibernate 無法監控物件是否有被異動。 首先合理懷疑是Aop Pattern 有問題,檢查一下XML檔, 1 2 3 4 5 <object i...

[Asp .Net MVC] ViewMode vs DTO(Data Transfer Object)

View Model 與 DTO 到底有何不同的時候,想用這篇文章解釋一下差異。 簡單來說View Model 是一個 POCO 物件,一個POCO 物件可以包含以下行為: 保留狀態(State)。 具有行為(資料驗證…) 最重要的就是具有行為,我們在做前端畫面時,很常透過Data Annotation 的方式,來驗證前端傳來的資料是否符合我們的定義, 1 2 3 4...

[Asp .Net MVC] 淺談MVC系統架構

最近剛好有機會跨部門參與系統架構的討論, 碰到把ViewModel 傳進「商業邏輯層」的現象, 藉此機會把MVC 的系統架構釐清清楚,避免後續再有類似情形的發生, 也會順便探討不傳進去的「好處」有哪些! 首先我們必須釐清兩樣東西「ViewModel」&「DTO (Data Transform Object)」, 簡單來說ViewModel 只是呈現畫面資料的模型,可能會涵...

[Asp .Net MVC] 使用ValidateAntiForgeryToken FilterAttribute 防範CSRF攻擊!

CSRF(Cross Site Request Forgery) 是一種駭客常用手段,網路上可以找到許多解釋,這邊就不再詳述, 這篇文章主要是在說明如何使用「AntiForgeryToken」以及「ValidateAntiForgeryToken」來防範CSRF, 另外也會說明,在不使用Form Submit 的情形下,該如何驗證AntiForgeryToken。 Html Hel...

[Asp .Net MVC] 使用ValidateAntiForgeryToken FilterAttribute 防範CSRF攻擊!

最近產品使用標準MVC架構來開發,其中Asp.Net 有提供大量的HtmlHelper來協助開發者製作前端畫面。 為了不要讓使用者有延遲感與系統效能的考量下,我們使用了AjaxHelper, 但Submit 後發現,畫面依然會重新載,並非透過Ajax 做部分區塊的資料更新。 首先我們先了瞭解一下AjaxHelper 是如何幫我們達到「非同步更新」的功能。 我們透過 Ajax.Be...

[Asp .Net MVC] ActionLink 頁面跳轉異常的問題

專案上碰到HyperLink 自動被加上了Area Name ,一來一往越來越多Area Name ,導致 Routing 異常的錯誤。 公司使用的是MVC 架構,專案目錄如下圖: 標準 MVC 資料夾結構,其中Controller 我擺了一個AccountController , 這個控制器是專門用來做系統權限控管的,簡單來說就是登入登出功能。 系統登入後會預設導入到 Start ...

[C#] 擴充方法(Extension Methods)!

C# 擴充方法(Extension Methods) ,C# 3.0 的「新」功能,其實也不新了畢竟C# 6.0都要出了。「擴充方法」顧名思義在原生類別擴充新的方法出來供人使用。 我們常使用的String 類別的其中有一個方法為Trim(),這個方法為去掉字串內前後的空白, 1 string tempString=" Word ".Trim(); 若我們想要有一個新的方法如「St...

icon_wechat.png