成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

論:如何成為有思想、能創新的程序員

開發
作為一家公司的首席架構師,該如何思考業務的具體實現?你應該做一名有思想、能創新的程序員。那具體該怎么做呢?

寫這篇文章也源于我和新員工的一些談話心得,一些基礎比較薄弱的技術人員,看起來有點像沒有思想和靈魂的程序員。你可能也會覺得國內有很多小企業出來的人或者剛畢業的人,會的最多也是CRUD和拖拉控件。我也接觸過一些技術人員,他們告訴我他們再也不想搞技術了,因為技術是在太無聊了,特別年紀稍大一點的,想的最多的就是轉行。曾經我非常驚訝于這樣的狀況,事實上,寫程序是一件很有創造力的事情,但為何很多人都會覺得無聊呢。

隨著年紀的增長,這些問題的答案慢慢變得清晰一些。在這里,我不敢說,我說的都是正確的,我只是在一直不停的探索。在探索之后,我對我的新員工說了以下的話:“進入我們公司,雖然我們也是很不起眼的剛創業的小公司,但是,你在這里需要做一些改變了。我知道你們以前的工作性質可能是上司給你交代任務,告訴你怎么做,然后你管也不管就照章辦事,拉拉控件,以完成項目功能為首要任務。在我們這里,你需要成為一個有思想的程序員。有思想的程序員需要懂得如何使用聰明的腦袋瓜。事實上,很多人都不知道我們的腦袋瓜到底能做多少事情,不過,一旦你嘗試了,你就會體會到‘不是做不到,而是想不到’。需要記住這些話,從思想上改變,從今天開始。首先,我們是做軟件產品的公司,質量是產品生存的首要標準,產品質量的最低要求就是易用性;其次,我們要保證產品的質量,代碼的質量首先要過關,標準編碼方式、異常處理方式、代碼的生命周期管理、編碼的完整性都需要兼顧;第三,避免寫一些垃圾代碼和重復的代碼,這需要動用你聰明的腦袋,我曾經寫了10幾個的CRUD產品,從而自主創新了控件關系映射、對象-對象映射、通用窗體框架,乃至我們現在的OSGi.NET產品和云計算SaaS商店平臺,都是從這些重復的勞作中不斷思索發明的。我看到設計模式的書時,可以驕傲的向同學們吹牛,我也設計過幾個‘模式’;第四,學會發現問題,探索問題,積極詢問,避免把問題遺留下來或者拖機取巧。浪費一個發現問題和解決問題的機會,相當于浪費提高自己的機會。最后,你要有信心成為一流有思想和靈魂的技術人員,別哪一天你離開尤埃時,丟我們的臉,:)。”

我不敢說,我現在多有思想,但是,我隱隱約約感覺到一些這樣的有意思的東西。我崇拜“道法自然”,它告訴我違反規律就會受到懲罰,因此,我會時刻反省我是否有做錯的事情,包括在平時編碼、設計和架構的時候,以及平時生活上的為人處事。接下來,我介紹一下,我如何來發明我曾經的產品,希望能夠給人一些啟發。

1 我是如何發明了控件關系映射組件

控件關系映射的發明源自于我在參與一款MIS系統的設計,該系統是一個鋼管管理系統,每一個鋼管的信息有很多很多的屬性,我記得鋼管廠給我們的數據說明書里面,一個管子的信息有驚人的380多列。因此,我們在查詢、修改、添加記錄的時候,總是會有類似以下成片成片的代碼。

  1. var add***Sql = "insert into Test(a1,a2,....aN) values(@a1,@a2,....@aN)";  
  2.  ......  
  3. var para1 = new SqlParameter("@a1", SqlDbType.String, a1.Text.Trim();  
  4.  var para2 = new SqlParameter("@a2", SqlDbType.String, a1.Text.Trim();  
  5.  ......  
  6.  var paraN = new SqlParameter("@aN", SqlDbType.String, a1.Text.Trim(); 

(忽略中間的N-3行代碼,以及查詢、修改和刪除的代碼)

我記得,我們一起做的另一個小伙拿了一個CRUD一千多個字段的表來向我們顯耀說:“我他媽的把這功能實現了!”。我不知道大家是否反感這樣的代碼,反正我是厭倦了。當我想到這是一件很痛苦的事情的時候,我考慮了如何來解決它。經過一些思考,我驚訝的發現,所有的CRUD以及界面的流程都可以抽象為“輸入-處理-輸出-輸入-處理-輸出......”的過程,處理的過程實際上是獲取輸入,然后組裝成SQL語句,最后在響應到界面。這個過程是以SQL語句為中心,SQL語句的參數來源于界面的控件或者界面類的其它成員,SQL語句執行的結果可能是跑到另一個頁面、執行DataGrid綁定、執行下拉列表綁定、給控件賦值。因此,我想到一個方法,可以設計一個SQL映射的配置,即利用這個配置,直接將界面控件映射到數據庫,并且也可以執行反向映射。以下是映射SQL的配置:

  1.  <?xml version="1.0" encoding="utf-8"?> 
  2.  <CrmMappings Class="HumanDispSolution.login" > 
  3.      <MappingSQL GenType="None" Name="Login" Value="select UID,Name,Sys_User.RID,Role from Sys_User,Sys_Role where Sys_User.RID=Sys_Role.RID AND UID=@UID AND Password = @PWD" SqlOpType="SELECT" CmdType="Text" > 
  4.          <SqlParams > 
  5.              <SqlParam Name="@UID" ControlID="UID" ParamType="String" IsFile="False" > 
  6.              </SqlParam> 
  7.              <SqlParam Name="@PWD" ControlID="PWD" ParamType="String" IsFile="False" > 
  8.              </SqlParam> 
  9.          </SqlParams> 
  10.         <SqlResults > 
  11. <SqlResult Field="Name" MemberID="UserName" IsStatic="True" AssemblyName="HumanDispSolution" StaticTypeName="HumanDispSolution.UserConfig" > 
  12.             </SqlResult> 
  13. <SqlResult Field="UID" MemberID="UserID" IsStatic="True" AssemblyName="HumanDispSolution" StaticTypeName="HumanDispSolution.UserConfig" > 
  14.             </SqlResult> 
  15. <SqlResult Field="RID" MemberID="RID" IsStatic="True" AssemblyName="HumanDispSolution" StaticTypeName="HumanDispSolution.UserConfig" > 
  16.             </SqlResult> 
  17. <SqlResult Field="Role" MemberID="Role" IsStatic="True" AssemblyName="HumanDispSolution" StaticTypeName="HumanDispSolution.UserConfig" > 
  18.            </SqlResult> 
  19. <SqlResult InvokeMethod="Log" IsStatic="True" AssemblyName="HumanDispSolution" StaticTypeName="HumanDispSolution.Logger" > 
  20.                <InvokeParam Value="登入系統" > 
  21.                 </InvokeParam> 
  22.             </SqlResult> 
  23.        </SqlResults> 
  24.     </MappingSQL> 
  25. </CrmMappings> 

以下是調用映射SQL語句實現CRUD中的一個操作。

  1.   namespace HumanDispSolution  
  2.   {  
  3.       public class login : CrmPage  
  4.       {  
  5.           private void btnLogin_Click(object sender, System.EventArgs e)  
  6.           {  
  7.               DataSet ds = this.ExecuteMapping("Login"as DataSet;  
  8.               if(ds.Tables[0].Rows.Count > 0) //登入  
  9.            {System.Web.Security.FormsAuthentication.RedirectFromLoginPage(UID.Text,false);  
  10.              }  
  11.              else 
  12. this.lAlert.Text = "<script language='javascript'>alert('登錄失敗,請重新輸入帳戶信息!');</script>";  
  13.          }  
  14.      }  

另外,我還編寫了一個工具來自動生成這樣的配置文件,從此以后,關于數據庫的CRUD,我爽了!!

2 我是如何發明了通用窗體框架

控件關系映射的發明也是源于上面提到的鋼管系統。當超過2個人一起參與一個復雜項目時,可能他們都需要操作主界面,在主界面加上各自模塊需要的菜單、需要的界面元素,此外兩個人設計的東西也完全不一致。這就造成一些問題了,因為如何實現兩個人的集成就有一些麻煩,而且經常出現意外。于是我就發明了一個通用窗體框架,這個框架提供了以下功能:

(1)集成用戶權限;

(2)集成數據訪問;

(3)插件式支持,每一個人都可以并行開發,集成時僅需要將配置文件集成一起就形成一個組裝起來的軟件了。

每一個開發人員只需要編寫類似以下的配置文件就可以集成了:

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2.  <MainForm> 
  3.      <Menus Name="菜單"> 
  4.          <Menu Name="系統(S)" LeftIndex="3" TopIndex="1" Command="" Class=""> 
  5.              <Menu Name="登錄管理" LeftIndex="1" TopIndex="1" Command="" Class=""/> 
  6.              <Menu Name="歡迎" LeftIndex="2" TopIndex="2" Command="" Class="CZB.Framework.WelcomeForm"/> 
  7.              <Menu Name="退出" LeftIndex="3" TopIndex="3" Command="Close" Class=""/> 
  8.          </Menu> 
  9.            
  10.         <Menu Name="數據導出(B)" LeftIndex="2" TopIndex="3" Command="" Class=""> 
  11.             <Menu Name="導出Excel" LeftIndex="2" TopIndex="2" Command="" Class="SalaryManagement.UI.frmExport"/> 
  12.         </Menu>          
  13.     </Menus> 
  14.       
  15.     <ToolButtons Name="工具欄"> 
  16. <ToolButton Name="工具欄名稱" Index="1" ImageIndex="1" Visible="true" Roles="" Command="HideOrShow" Class="工具欄名稱" /> 
  17.      <ToolButton Name="工具欄名稱1" Index="2" ImageIndex="2" Visible="false" Roles="" Command="" Class="工具欄名稱1" /> 
  18.     </ToolButtons> 
  19. </MainForm> 

3 我是如何設計了對象-對象關系映射

ORM對于一些小型應用感覺有點龐大,但是對于大型應用,我想是一個比較總要的組件了。在我們使用ORM組件時,也經常會寫以下代碼。

  1. var user = new User();  
  2. user.Name = NameTextBox.Text.Trim();  
  3. user.Password = PasswordTextBox.Text.Trim();  
  4. ......  
  5. OrmFactory.Save(user);  
  6. ----------------------------------------------  
  7. var user = OrmFactory.QueryScalar(...);  
  8. NameTextBox.Text = user.Name;  
  9. ...... 

如果一個MIS系統充斥了大量這樣的代碼,估計你也會膩味,從而喪失對編程的興趣了。記得我剛才說什么來了,“有問題,意味著升華”,“做一個有思想的程序員”。因此,接下來的問題就是,我們如何來解決類似這樣重復的勞動。我在2006年時想到的辦法就是實現一個對象-對象的映射。首先,設計如下實體類:

  1. public class UserEntity  
  2.  {  
  3.      ……  
  4.      [Member]  
  5.      public int Age;  
  6.      [Control]  
  7.      public string Name   
  8.      {  
  9.          get { return this._Name; }  
  10.         set { this._Name = value; }  
  11.     }  
  12.    [Control("CardNo.Text")]  
  13.     public string CardNo   
  14.     {  
  15.         get { return this._CardNo; }  
  16.         set { this._CardNo = value;    }  
  17.     }  
  18.     ……  
  19. }  
  20.  
  21. public class EmployeeEntity  
  22. {  
  23.     ……  
  24.     [Reference(typeof(UserEntity))]  
  25.     public UserEntity User  
  26.     {  
  27.         get { return this._User; }  
  28.         set { this._User = value; }  
  29.     }  
  30.     [Control]  
  31.     public float PostSalary   
  32.     {  
  33.         get { return this._PostSalary; }  
  34.         set { this._PostSalary = value; }  
  35.     }  
  36.     ……      

其次,調用ObjectEngine實現OO映射。

A 實現表單類與實體類映射

  1. private void Map_Click(object sender, System.EventArgs e)  
  2. {  
  3. this.o = CZB.ObjectMapper.ObjectEngine.Map(this,typeof(EmployeeEntity)) as EmployeeEntity;  

B 實現實體類與表單類的映射

  1. private void InverseMap_Click(object sender, System.EventArgs e)  
  2. {  
  3.     this.o.User.Name = "c.z.b in";  
  4.     this.o.User.Age = 19;  
  5.     this.o.CompoInsurance = 0;  
  6.     CZB.ObjectMapper.ObjectEngine.InverseMap(this,o);  

4 我是如何設計OSGi.NET和SaaS商店產品

至于OSGi.NET和SaaS商店是我在不斷思索通用窗體框架以及對現有科技的趨勢的把握下,由幾個很有創造力的編程人員,在建立了完善的產品保障體系下,構建起來的。這兩個產品我會在后面介紹如何設計的。他們的設計我用了很長的時間。

我不是什么老鳥,希望我們在如此多的技術的世界中能夠多多交流,共同進步。解決這些問題,不僅增加了編程的樂趣,更是增加了自己的見識,從而避免自己成為一個沒有思想的程序員!我也知道,我們可以找到很多理由來反駁文中提到的做法和觀點,但是,提高自己才是最重要的,不要去著急的否定一些什么,并給自己找借口。

原文鏈接:http://www.cnblogs.com/baihmpgy/archive/2010/12/14/1905144.html

【編輯推薦】

  1. 程序員的十大技術煩惱
  2. 架構師最怕程序員知道的10件事
  3. 每個好架構師都是一位出色的程序員
  4. 程序員必須養成良好的代碼習慣
  5. PHP程序員如何突破成長瓶頸
責任編輯:彭凡 來源: 博客園
相關推薦

2023-11-06 07:19:11

程序員GitHub社交媒體

2015-11-12 10:32:13

程序員FaceBook

2015-05-13 14:06:03

程序員糟糕的程序員

2011-11-09 13:52:04

程序員

2009-07-24 13:09:57

ASP.NET程序員

2015-07-13 11:32:09

PHP程序員正確姿勢

2009-07-01 16:48:43

JAVA程序員

2009-07-02 09:42:34

JSP程序員

2010-12-27 09:24:45

JSP程序員

2015-06-25 19:23:03

JavaScript程序員

2015-06-25 09:53:13

JavaScript程序員

2017-09-21 09:44:00

編程程序員軟件開發

2011-05-03 08:54:36

2015-06-25 09:32:55

JavaScript程序員

2012-12-12 09:52:18

程序員

2021-02-21 13:49:48

Java程序員開發

2019-01-28 11:54:28

程序員技能溝通

2015-05-15 10:39:44

Java 冠軍程序員?

2011-04-11 17:41:35

C++程序員

2015-01-14 10:17:28

高級程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷在线免费 | 欧美在线一区二区三区 | 狠狠操狠狠操 | 69堂永久69tangcom | 久久成人一区 | 国产精品久久久久久久免费观看 | 国产亚洲高清视频 | 久久久婷婷 | 中文字幕乱码视频32 | 狠狠操电影 | 久久久久久久久久一区二区 | 国产中文字幕亚洲 | 国产精品自拍av | 国产成人精品高清久久 | 成人性视频免费网站 | 精品一区二区三区四区视频 | 国产精品观看 | 国产成人免费视频网站高清观看视频 | 嫩草视频在线 | 国产福利在线 | 精品欧美一区二区三区久久久 | 国产欧美日韩一区二区三区在线 | 亚洲欧美日韩精品久久亚洲区 | 久久99精品久久久久久秒播九色 | 国精产品一品二品国精在线观看 | 免费黄色网址视频 | 国产va| 日韩欧美不卡 | 成人h动漫亚洲一区二区 | 精品视频一区二区 | 91精品国产91久久久久久三级 | 最近最新中文字幕 | 国产精品网页 | 欧美国产亚洲一区二区 | 韩国精品一区二区三区 | 超碰人人爱 | 一区二区三区免费观看 | 久久99精品久久久久久青青日本 | 精品在线一区 | 日韩第1页 | www亚洲精品 |