2010-10-14 44 views
1

我編寫了一些代碼將應用程序連接到它的數據庫,然後創建了一些代碼以使用連接代碼並檢索,更新或添加一些值數據庫,另外我可能有一些代碼來處理其他的東西,而不是處理數據庫如何組織我的代碼(我爲我的網站上的各種用途創建的方法)

代碼有點複雜,也許它很簡單,但它並不短,例如編寫一段好的代碼檢索單個值,這樣我就可以用這個值我用這個控制器:

SqlConnection sqlconnection= new SqlConnection(ConfigurationManager.ConnectionStrings["DefConnectionString"].ConnectionString); 
     SqlCommand sqlcommand = new SqlCommand("SELECT name FROM message WHERE id = 3", sqlconnection); 

     try 
     { 
      sqlconnection.Open(); 
      lbl_name.Text = (string)sqlcommand.ExecuteScalar(); 
      Status.Text = "Done"; 
     } 

     catch (Exception ex) 
     { 
      Status.Text = ex.Message; 
     } 

     finally 
     { 
      sqlconnection.Close(); 
     } 

我可能甚至添加一些代碼來存儲一些數據庫中關於任何異常的信息都被拋出,我認爲代碼是非常基本的,但它並不小,因爲它是我需要的最小的一塊,一些巨大的代碼是爲添加或編輯新項目而編寫的,並且也考慮到它不是我在頁面中寫入的唯一代碼,頁面有更多需求:D!

我已經提供了一個詳細的案例,我希望!...那麼你認爲什麼是最好的方式,使我的網頁快速,易於閱讀和有組織的代碼 我已經開始將每個代碼放入一個適當的方法,但一些方法是常見的,所以我在每一個需要它們的頁面中再次創建它們,就像一個ConnectionToDataBase方法,並且意味着我認爲我只是組織了頁面,因此我可以主要查看Page_Load並查看被調用的方法和然後向下滾動閱讀定義,但它仍然是一個大頁面,並注意我認爲的最佳做法

對不起所有的大問題,我只是提供詳細信息,所以我可以得到一個合理的答案我的問題,我希望每個人的利益從大多數問題都非常基本,像我這樣的新手需要一些詳細的案例和答案,以獲得更好的開始......感謝您的時間!

編輯:我知道我是新的,所以對我的代碼的任何意見都比歡迎!

+0

很難理解到底你在問什麼。但是,我不喜歡在每個頁面上都有一個「ConnectionToDataBase」方法的想法。也許重新考慮你的項目結構,你能創建一個DAL嗎? – RPM1984 2010-10-14 01:25:12

+0

我知道,這是新的,所有的壓力感到抱歉!我很想知道如果有一種方法可以多次創建相同的功能,但我已經獲得了一些編寫非常新手代碼的經驗,但概念和最佳實踐以及安全代碼但我很想學習爲我的網站編寫一個好的代碼,你知道任何文章或書籍可能有助於我的問題!? – lKashef 2010-10-14 01:39:04

回答

2

一些快速意見:

  1. 不要使用內聯SQL,因爲它是保持熊(去使用存儲過程或者如果你正在做基本的CRUD操作,考慮一個ORM)

如果你必須使用內聯SQL,在最終將你的值合併爲一個命令文本的情況下,你可以讓自己開放SQL注入攻擊(並且通常你應該在任何情況下避免內聯SQL)。

  1. 不要全局捕獲和吞嚥異常 - 只捕獲異常,你實際上是處理他們 - 否則,他們的泡沫備份。你會希望將數據訪問代碼抽象爲一個與業務對象無關的數據訪問層(我是一個存儲庫模式的粉絲),或者(最好是)考慮一個ORM(我強烈推薦NHibernate,可能實體框架4有更好的POCO支持)。

一般來說,我如何構建這種數據是有一個業務對象有一個庫對象的引用 - 這被定義爲一個接口,這樣我就可以通過依賴注入換出我的測試和實際實現。

數據存儲庫然後執行相關的繁重工作(通常通過ORM,有時在ADO中)。對於我們的一些遺留代碼來說,Net) - 所以如果我需要一個客戶列表,我只需要在存儲庫上調用一個'GetCustomers'方法。業務層沒有數據訪問的知識,只知道當它調用一個方法時,它會得到一個很好的強類型列表。

[應答請求RE組織]

當我使用這個模式的MVC網站,我通常有我的控制器調用業務邏輯類。它的目的是封裝從數據訪問層檢索的非數據特定計算等。

業務邏輯類將依次引用一個或多個封裝我的數據和我的業務類(如保存/檢索數據等)之間的數據傳輸的存儲庫。

存儲庫負責提供數據(同樣,ADO.Net,NHibernate,EF,無論適用於您)。它應該沒有業務邏輯,只需從我的數據庫中獲取數據,適當地對其進行適當的形式化,然後將基本的非特定於數據的對象返回到業務層即可。

我在我的博客上有一些關於這個組織的示例(在我的個人資料中可用),雖然它們是NHibernate特有的,但是顯示了一個相當基本的存儲庫模式用法。

希望能幫到:)

+3

關於#1的額外注意事項 - 不要忘記SQL注入攻擊。如果你必須使用內聯SQL,至少要參數化它。 – RPM1984 2010-10-14 01:17:05

+0

優秀的評論:)也將添加SQL注入以及。 – 2010-10-14 01:18:29

+0

我認爲你的答案與提供解決方案來組織我的代碼和方法沒有任何關係,但我認爲這些信息非常適合我和其他許多新手+1,非常感謝Bob。 – lKashef 2010-10-14 01:18:53

相關問題