2016-11-24 95 views
1

在我的公司(我最近加入)中,一個ASP.net解決方案用於爲客戶提供基於http的RESTful API。將基於存儲過程的解決方案遷移到OOP?

在事實,這種「API層」層是非常「瘦」有很多方法,這些方法只包含2行代碼:將參數+主叫更深層。

因此,「API層」傳遞給它通過HTTP得到召喚到下一層,其將屬性「業務對象」,這主要是班級,性質而已,幾乎沒有邏輯的參數。這個「業務層」再次將這些屬性傳遞給一個「存儲庫層」,該存儲層填充另一個類(「參數類」)的屬性,最後用這些參數調用存儲過程。

幾乎所有的「業務邏輯」都在存儲過程中「隱藏」。

當它們被調用時,它們將它們的參數傳遞迴C#存儲庫層類並將其全部轉換回「API層」。

所以簡而言之:C#類沒有真正使用任何邏輯或OOP。實際上,它們很可能可以從存儲過程參數自動創建,因爲它們很簡單:它們收集API參數,將它們傳遞到數據庫(Oracle)到存儲過程,並將存儲過程調用的結果傳遞迴API。

正如您從所描述的「架構」中所期望的那樣,目前沒有單元測試和集成測試。

所描述的架構比較陳舊,我猜想在80年代,在數據庫中創建所有BL可能有意義。

因爲我習慣了TDD,我開始創建對現有的代碼庫,這是困難的,因爲它不是爲心中可測試性的單元測試。不幸的是,除了「正確的」參數調用「正確的」存儲過程之外,還沒有太多的測試。

對於未來,計劃,即通過存儲過程訪問數據庫應該是唯一允許的方式,使移動到某種O/R映射器可能是遙不可及的。

您對這個「建築」有什麼看法?

它與我迄今在職業生涯中看到的任何(有用)代碼都不相似。 (編程C#自從1.0版本,C++)之前

我習慣了TDD,寫在C#類的業務邏輯,使用OOP機制,可靠的代碼,圖案,...

的數據庫通常是「持久性層「,只能用O/R映射器訪問。

所以我不知道從哪裏開始。你會如何開始,將這個80年代的「架構」轉換爲更多的OOP風格?

我想運用現代OOP編程風格來創建可維護,可測試的自動和自適應的解決方案,而不是繼續把邏輯存儲過程和使用C#一樣的包裝來調用這些程序。

也許我可以創建一個原型,使用實體框架通過調用存儲過程來做一些基本的CRUD和查詢操作?

+1

的問題要問將沿「線這是否重寫提供給企業帶來什麼好處?你能保證不會有任何需要重寫其他應用程序?多少時間是這樣的要去?「而且,管理層最喜歡的問題是:「這會花多少錢?」。我建議最好是實現業務所需的功能,而不是着手對沒有明確的業務收益或目標的有效代碼庫進行大量改寫。 –

+0

這個問題可能有點意見爲主,但這裏有一個類似的線程,涵蓋的話題相當不錯:數據庫需要多少業務邏輯的實現?(http://softwareengineering.stackexchange.com/questions/194446/how -much-業務邏輯應該最數據庫實現) –

+0

此外,[這個線程(http://softwareengineering.stackexchange.com/questions/170808/do-stored-procedures-violate-three-tier-separation )(前​​面提到的)涵蓋了同一主題。 –

回答

0

感謝您的回覆! 我完全同意,只要事情需要付出努力,總會有「商業價值」作爲好處。

「大老式穩定」應用程序的問題是需要新功能並且不斷添加(在存儲的程序中),但很多代碼已經很老了,沒有人知道它的真正用處。也沒有人知道,如果添加新功能可能會破壞現有的「穩定應用程序」。

「穩定性」是一個必須具備的要求,可惜的是在我看來時不能保證,沒有添加任何的測試功能後增加功能時 - 事情甚至會進一步降低。

至少那是我的經驗和我曾在一個項目中,正是這種happended的代碼庫一直在努力。回到現在,我們沒有測試,也不瞭解優秀的實踐。事實上,在3年後,我們不得不拋棄整個代碼庫並從頭開始......是的,這是我們第二次首先了解了良好實踐,並以TDD方式進行了實踐,並且代碼庫仍然具有足夠的適應性以添加新的要求,6年後。

所以我已經學會了「辛苦」,爲什麼一個可測試和適應性代碼庫是重要的,希望我和我的團隊不必再走上這條路。 :)你會