<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [畢業(yè)生的商業(yè)軟件開發(fā)之路]盡早暴露錯誤原則

      近期開始接觸到在校學(xué)生、高校實習(xí)生和畢業(yè)生,在此說一下筆者對這些徘徊在職場門口的學(xué)生一些建議,希望能給這些初學(xué)者進入軟件開發(fā)行業(yè)帶來一些幫助,使得畢業(yè)生能更順利的進入軟件開發(fā)公司開始職場生涯,人生來一個完美的轉(zhuǎn)彎。

      -----------------------------------------------------------------------

       

      開發(fā)者應(yīng)當(dāng)遵守“盡早暴露錯誤”的開發(fā)原則,這是因為程序錯誤是客觀存在的事實,應(yīng)當(dāng)正視它并有效的處理它,而不是簡單粗暴的和諧掉。而且在開發(fā)中應(yīng)當(dāng)盡早暴露出程序的錯誤,這有助于發(fā)現(xiàn)錯誤的本質(zhì),幫助改善程序質(zhì)量;若一味的和諧掩蓋錯誤,則錯誤越拖影響越大,最后不可收拾,程序崩潰。[袁永福版權(quán)所有]

      下面舉個這條原則的例子,現(xiàn)數(shù)據(jù)庫中有一個名為Customers的數(shù)據(jù)表,其內(nèi)容如下:

      CustomerID

      CompanyName

      ContactName

      ContactTitle

      Address

      City

      1

      少室山公司

      方證

      采購員

      東園西甲 30 號

      長平

      2

      擎天航空

      雷震子

      銷售代表

      常保閣東 80 號

      莫斯科

      3

      華夏工程

      李大禹

      市場經(jīng)理

      廣發(fā)北路 10 號

      幽州

      4

      武當(dāng)投資

      宋青書

      物主

      臨翠大街 80 號

      巴伐利亞

      5

      擎天南京公司

      大星星

      物主

      花園東街 90 號

      許安

      對此筆者可以寫出以下的兩種代碼來讀取并輸出其中的數(shù)據(jù):

      第一種:

       

      using (IDbConnection conn = new OleDbConnection())
      {
          
      // 連接數(shù)據(jù)庫
          conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
              
      + System.IO.Path.Combine(Application.StartupPath, "Customers.mdb");
          conn.Open();
          
      using (IDbCommand cmd = conn.CreateCommand())
          {
              
      // 設(shè)置SQL語句
              cmd.CommandText = @"
                  Select 
                      CustomerID ,
                      CompanyName ,
                      ContactName ,
                      ContactTitle ,
                      Address ,
                      City
                  From Customers
      ";
              
      // 讀取并輸出數(shù)據(jù)
              IDataReader reader = cmd.ExecuteReader();
              
      if (reader.Read())
              {
                  Console.WriteLine(
      "CustomerID  =" + reader["CustomerID"]);
                  Console.WriteLine(
      "CompanyName =" + reader["CompanyName"]);
                  Console.WriteLine(
      "ContactName =" + reader["ContactName"]);
                  Console.WriteLine(
      "ContactTitle=" + reader["ContactTitle"]);
                  Console.WriteLine(
      "Address     =" + reader["Address"]);
                  Console.WriteLine(
      "City        =" + reader["City"]);
              }
      //if
              reader.Close();
          }
      //using
      }//using

       

      第二種:

       

      using (IDbConnection conn = new OleDbConnection())
      {
          
      // 連接數(shù)據(jù)庫
          conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
              
      + System.IO.Path.Combine(Application.StartupPath, "Customers.mdb");
          conn.Open();
          
      using (IDbCommand cmd = conn.CreateCommand())
          {
              
      // 設(shè)置SQL語句
              cmd.CommandText = @"Select *  From Customers";
              
      // 讀取并輸出數(shù)據(jù)
              IDataReader reader = cmd.ExecuteReader();
              
      if (reader.Read())
              {
                  Console.WriteLine(
      "CustomerID  =" + reader["CustomerID"]);
                  Console.WriteLine(
      "CompanyName =" + reader["CompanyName"]);
                  Console.WriteLine(
      "ContactName =" + reader["ContactName"]);
                  Console.WriteLine(
      "ContactTitle=" + reader["ContactTitle"]);
                  Console.WriteLine(
      "Address     =" + reader["Address"]);
                  Console.WriteLine(
      "City        =" + reader["City"]);
              }
      //if
              reader.Close();
          }
      //using
      }//using

       

      這兩種代碼的唯一的區(qū)別就在于其中使用了不同的SQL語句,第一種代碼使用的SQL語句是

      Select

          CustomerID ,

          CompanyName ,

          ContactName ,

          ContactTitle ,

          Address ,

          City

      From Customers

      而第二種代碼使用的SQL語句是

      Select * From Customers

      第一種SQL語句字符比較多,開發(fā)者比較懶的話很容易寫出第二種SQL語句。不過筆者推薦使用第一種SQL語句,因為第一種SQL語句符合盡早暴露程序錯誤的原則。[袁永福版權(quán)所有]

      如果當(dāng)數(shù)據(jù)庫沒有問題,則兩種SQL語句都能執(zhí)行,程序都能正確的讀取數(shù)據(jù),此時第二種寫法反而貌似不錯。

      不過實際中應(yīng)用程序開發(fā)和運行環(huán)境很復(fù)雜,比如發(fā)生了代碼中字段名拼寫錯誤、數(shù)據(jù)庫字段結(jié)構(gòu)發(fā)生改變,這些都是需要考慮到的問題。

      例如數(shù)據(jù)表[袁永福版權(quán)所有]Customers中的字段Address由于某種原因刪掉了,于是這兩種代碼都會發(fā)生錯誤。

      對于第一種代碼,程序會在執(zhí)行代碼“IDataReader reader = cmd.ExecuteReader();”時就會爆出異常“至少一個參數(shù)沒有指定值 OleDbException”。此時開發(fā)者借助VS.NET可以很快的確定出發(fā)生錯誤的代碼,并根據(jù)錯誤提示很容易猜測SQL語句寫錯了。于是開發(fā)者進行SQL語句與數(shù)據(jù)庫結(jié)構(gòu)的對比,很快就能發(fā)現(xiàn)錯誤的本質(zhì),那就是字段Address突然沒了。

      而對于第二種代碼,程序順利的執(zhí)行了代碼“IDataReader reader = cmd.ExecuteReader();”,但在執(zhí)行代碼“Console.WriteLine("Address     =" + reader["Address"]);”時爆出異常“Address IndexOutOfRangeException”。對于這個錯誤,開發(fā)者首先會有些迷惑,不知為什么發(fā)生錯誤,因為錯誤提示信息和數(shù)據(jù)庫聯(lián)系不大,而后懷疑代碼中的“reader["Address"]”出現(xiàn)字段名拼寫錯誤,花上一段時間仔細(xì)校對確定無誤后才會往前繼續(xù)尋找錯誤的來源,會發(fā)現(xiàn)SQL語句沒有拼寫錯誤,最后才會想到去查數(shù)據(jù)庫結(jié)構(gòu),繞了半天才發(fā)現(xiàn)數(shù)據(jù)庫字段Address沒了,這才是錯誤的本質(zhì)。

      在這個例子中,數(shù)據(jù)庫字段Address刪掉的那一刻起,系統(tǒng)就存在隱患,而第一種代碼能在第一時間由于這個隱患而爆出錯誤,而開發(fā)者就能立即定位到離隱患最近的代碼,得到跟隱患密切相關(guān)的錯誤提示信息,也就能非常快的發(fā)現(xiàn)問題的本質(zhì),從而解決問題。這是一種將錯誤扼殺在搖籃當(dāng)中的做法,對開發(fā)者對程序都有好處。[袁永福版權(quán)所有]

      而第二種代碼很和諧,沒能在第一時間讓隱患爆出錯誤,讓隱患養(yǎng)著更肥,一直默默的影響著程序的運行,最終隱患爆出更大的更讓人摸不著頭腦的錯誤,使得開發(fā)者需要花費更多的時間精力來處理這個錯誤,這是姑息隱患,將錯誤養(yǎng)大了出欄再殺的做法,對開發(fā)者對程序都有害處。

      在VB中有一個寫作“On Error Resume Next”的語句,號稱能和諧掉程序中所有的錯誤,讓程序不爆出任何異常,丫就徹徹底底的破壇子破摔、掩耳盜鈴的做法,因此這種寫法應(yīng)用得比較少。

      因此開發(fā)者要寫出一個真正和諧的程序,其過程必然不能簡單粗暴的和諧,要盡可能早的讓各種隱患爆出程序錯誤;隱患要上訪變成錯誤,程序不能打擊壓制,而且程序要疏通各種隱患上訪的通道,讓開發(fā)者更快的發(fā)現(xiàn)錯誤的本質(zhì),更快的解決錯誤。尊重科學(xué)規(guī)律,正視隱患和錯誤,正確處理錯誤而不是打壓隱患,程序才能和諧健壯。

      嘿嘿,人類社會又何嘗不是這樣啊。[袁永福版權(quán)所有]

       

      posted on 2011-08-30 11:16  袁永福 電子病歷,醫(yī)療信息化  閱讀(3162)  評論(13)    收藏  舉報

      導(dǎo)航

      主站蜘蛛池模板: 午夜福利国产精品视频| 东京热一精品无码av| 免费看婬乱a欧美大片| 亚洲精品一区二区三区不| 中文字幕人妻日韩精品| 西和县| 精品国产中文字幕在线看| 久久精品免视看国产成人| 亚洲人成电影网站色mp4| 欧美激情肉欲高潮视频| 九九热精彩视频在线免费| 18禁在线一区二区三区| 亚洲国产精品成人av网| 久热天堂在线视频精品伊人| 国产视频一区二区三区麻豆| 亚洲欧美中文日韩V日本| 亚洲成A人片在线观看的电影 | 色综合色综合色综合久久| 国产综合视频一区二区三区| 国产精品久久久久久久久久直播| 国自产拍偷拍精品啪啪模特| 国产一级精品在线免费看| 免费午夜无码片在线观看影院| 国产成人综合欧美精品久久| 无码精品人妻一区二区三区中| 国产色无码专区在线观看| 久久精品亚洲国产综合色| 久久久久高潮毛片免费全部播放| 日韩精品一卡二卡在线观看| 亚洲av久久精品狠狠爱av| 九九热精品视频在线免费| 国产精品剧情亚洲二区| 国产成人无码免费视频在线| 亚洲欧美激情在线一区| 四虎影视库国产精品一区| 久久精品国产九一九九九| 上司人妻互换中文字幕| 九色综合国产一区二区三区| 狠狠色噜噜狠狠狠狠2021| 国产中文三级全黄| 仁寿县|