原创 如今誰坐龍位?

某天早晨,我和一個程序員隨便談談,他說,我們的系統變成假3層了。語氣中看來非常寥落。我腦中便一下子跳出這個“龍位”的故事:   “民國14年,費孝通到湖南永順考察,當地人問他:‘如今誰坐龍位?’,14年光陰一瞬間,在很多人看來如此重

原创 深度.net——成都2010年仲夏.NET社區精英活動

深度.net——成都2010年仲夏.NET社區精英活動     Visual Studio 2010的發佈意味着大量新產品特性的全新亮相,更重要的是——行業巨人微軟優雅轉身,全面應用敏捷編程到日常工作中。那麼我們程序員如何學習微軟,讓敏捷

原创 Svn vs VSS : 用數字說話

  圖來自於MartinFolwer(簡稱MF)本人的博客中的文章:VcsSurvey。他做的一個調查,調查樣本爲ThoughtWorks公司的100名(諮詢師)。圖的縱座標爲“迴應比例”,橫座標爲“贊成比例”。分別表明使用的普及程度

原创 scrum,CMMI以及其他

2010年11月29日 16:31   有團隊就需要過程管理,以便協調資源,高效合作。我們公司的“青蛙王子”,“三頂法”都是這樣的代表。儘管透着樸實,但是曾經比較起作用的。   現成的主流方法論如何呢?現成的方法論有兩個大類,一個大類是以

原创 改善sql字符串的可讀性 - sql字符串常見編寫風格

  所謂的動態sql,就是在t-sql字符串內的sql,而靜態sql就是直接寫在t-sql 存儲過程內的。動態sql的好處是可以寫出非常複雜的,表達能力很強的sql,並且,因爲某些條件下sql更簡單,因此號稱效率更好。而靜態sql的好處

原创 改善sql字符串的可讀性(2) - 多個可選條件拼接的優化

  報表衆多的系統,“多個可選條件拼接”就會大量存在。因爲程序員需要根據條件錄入框的的值是否存在來決定是否拼接這個對應條件。有點抽象,還是看代碼。   string sql = @"select n.vchcode,n.summary,

原创 Best practise : 封裝存儲過程 (續)

  還是以上面提到的存儲過程delete_dept爲例。delete_dept實在是太過粗糙,缺乏基本的錯誤檢查。現在用戶需要在刪除前給它加入一個檢查,和現實的代碼更接近一些。 檢查爲:“如果dept內有對應的person,那麼提示用

原创 尋找IDE for sql

某天早晨,我問一個程序員:“如果你接受了一個修改一個存儲過程的任務,那麼你會如何一步步的完成這個工作"?他的回答是:“先啓動vss,找到這個文件,然後用‘查詢分析器’修改,調試,然後提交”。   都是些什麼阿貓阿狗的啊。vss就不怎麼

原创 Best practise : 封裝存儲過程 (續2)

  繼續以delete_dept爲例。   作爲存儲過程,當“如果dept內有對應的person,那麼提示用戶不能刪除”這個需求提出的時候,delete_dept是無法在運行時提醒用戶的,因此它必須和UI代碼達成協議:當delete_

原创 編碼中的不安全感

任何事件都會在人身上體現出情感。愉快令人奮進,懊惱令人無力——這些都意味着改變,意味着潛能的發揮,新的一扇門在你的面前打開。今天談到的是安全感。程序中

原创 改善sql字符串的可讀性(3) - 多個可選Join 拼接優化

  報表衆多的系統,不僅僅是where子句存在拼接,join子句也可能需要拼接。還是看代碼: String sql=" select * from bill  "; if (queryParams.pTypeId != null) {

原创 Visual studio 2010 Database Project 的命令行發佈方法

“聲明型數據庫發佈”在IDE內操作起來是非常方便的。但是在做安裝包給用戶的時候,或者在DailyBuild服務器上不可能也不應該安裝Visual Studio。還好MS提供了auto deploy的命令行方法。這個命令叫做vsdbcm

原创 Best practise : 封裝存儲過程

  如果我們寫了一個存儲過程,比如叫做delete_dept,功能非常簡單——就是刪除指定id的部門:   CREATE PROCEDURE [dbo].[delete_dept]           @id int AS delet

原创 sql server 2008 R2 Data-tier Application 提供新的數據庫升級方法

sql server 2008 R2  Data-tier Application 提供新的數據庫升級方法   數據庫的升級總是比應用程序的升級要困難。應用程序升級不外乎就是完整的覆蓋文件。而數據庫的升級不能簡單的做文件整體覆蓋,而必須考

原创 best practice 封裝存儲過程(續4)——越抽象,就越容易封裝變化。

  上回書 Tony  says: “看起來它似乎並沒有改善不同層次代碼的耦合關係,以前例看,所有的針對數據庫的調用都是通過C#層的RunProc實現的,似乎它本身就充當了隔離層的作用,爲什麼還要增加一個無用的層delete_dept