文檔驅動式代碼設計器——代碼是設計出來的!

来源:http://www.cnblogs.com/jyk/archive/2016/10/22/5986780.html
-Advertisement-
Play Games

代碼是敲出來的嗎?是批量生成出來的嗎? No no no,代碼是設計出來的! 如果說到代碼生成器,大家可能會想到三層、動軟代碼生成器、資料庫表等等。其一般的思路是,先有資料庫然後根據庫里的表自動生成一系列的代碼,包括實體類、持久化、業務層(空函數)、頁面代碼等,還可以生成資料庫文檔。這個確實很好很強 ...


 

  代碼是敲出來的嗎?是批量生成出來的嗎?

 

  No no no,代碼是設計出來的!

 

  如果說到代碼生成器,大家可能會想到三層、動軟代碼生成器、資料庫表等等。其一般的思路是,先有資料庫然後根據庫里的表自動生成一系列的代碼,包括實體類、持久化、業務層(空函數)、頁面代碼等,還可以生成資料庫文檔。這個確實很好很強大,可以免除程式員的機械式的敲代碼的工作。

 

(“主要實現在對應資料庫中表的基類代碼的自動生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model類構造等基礎代碼片斷,支持不同3種架構代碼生成,使程式員可以節省大量機械錄入的時間和重覆勞動,而將精力集中於核心業務邏輯的開發。”

——摘自動軟官網的介紹  )

 

  但是我們都知道,表的設計是根據客戶的需求、業務邏輯、設計人員的項目經驗設計的,其中最主要的是要受到關係型資料庫自身的特點(所以nosql嘛)。表並不能完整體現業務需求,否則教會客戶使用企業管理器(資料庫的客戶端軟體)就可以了。直接把表交給客戶用,那是不行的,否則程式員就集體失業了。

 

  總結一下,一般代碼生成器的思路是:資料庫表——代碼——文檔。

 

  而我這裡說的思路是完全相反的:文檔——代碼——資料庫——業務邏輯

 

  一般我們做項目的順序是:調研,設計,編碼,測試,上線。其中設計階段要編寫大量的文檔,比如功能說明,各種流程圖,領域設計,資料庫設計,原型圖等等。還要編製任務計劃,團隊分工合作。然後開始編碼。編碼的時候會發現,上一階段的各種文檔只能看,對於要編寫的代碼完全沒有直接作用,必須要程式員進行“翻譯”。把文檔翻譯成代碼——於是乎苦逼的碼農誕生了!

 

  而實際情況是,項目緊任務重時間還短。怎麼辦呢?文檔可以沒有或者後補,但是代碼是不能沒有的,所以往往文檔就被忽略甚至完全被幹掉了——這是文檔和代碼的矛盾點。

 

  怎麼辦呢?犧牲文檔?下麵要介紹一把雙刃劍:可以讓文檔成為代碼的助力!可以把碼農從簡單、機械、重覆中解脫出來,但是同時也意味著不會再有“碼農”這個崗位!

 

  還要從剛進入的這家公司說起。公司主營各種企業管理的項目,採用ABP架構最為底層,然後又進一步封裝。

   簡單的說,用EF的code frist做實體類,然後生成資料庫,再根據業務需求設計Dto,有很多很多的Dto。頁面用angularjs做總控和表單,kendoui做列表。存儲部分至少定義一個介面,webapi部分也要定義一個介面。總之面向介面編程嘛。還有很多很多,逐步瞭解中。

 

  對於新人來說,最大的問題就是——這都哪跟哪呀。有了code frist,也就沒有了資料庫文檔。有一大堆dto,但是這些dto都是啥功能?點開挨個看吧。

 

  看了兩周還是蒙登。如果有一系列的文檔說明該多好?但是大家都知道,任務緊工期短,哪有時間弄文檔?

   好了又繞回來了,如果我們設計的文檔可以自動生成代碼,是不是一切就都迎刃而解了呢?

 

  資料庫角度:先設計資料庫文檔,然後自動生成ef的code first 的實體類,然後用ef的資料庫遷移功能建立表。然後生成預設的介面定義。這個沒啥難度吧。

 

  業務角度:設計功能模塊、頁面,頁面裡面的數據列表、查詢、分頁、刪除、表單等,然後根據這些設計生成對應的Dto,以及相關的介面,還有頁面需要的代碼。這樣代碼和文檔就都有了。

 

  怎麼樣,一份設計實現兩種功能(文檔和代碼)。這時候基本功能就都出來了。然後在生成的代碼基礎上做一些調整和優化,主要是頁面方面。

 

  最後每個項目總會有些特殊的需求,我們就可以集中精力幹掉它們了,

 

  對了,還可以生成測試用例,還有測試人員使用的測試平臺也可以結合起來。

 

  現在您相信了吧:代碼是設計出來的!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 官方說5.5開始就廢棄mysql_query()這塊東西很多,當然常用的就幾個還是看手冊吧。 這裡簡單記錄一下。在我失憶之後可以找回一點記憶。最近一直用框架原生的都快忘了。 1.打開mysql連接 $resource1 = mysql_connect('localhost', 'root', 'ro ...
  • 字元串截斷函數是指:Stuff 和 SubString,字元串查找函數是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字元串函數,用於截取特定長度的子串。 參數說明: start 參數:整數,表示開始位置;字元的序號(index)從1開始,即第一個字元的序號是 ...
  • 今天遇到了一個問題,要查詢今天添加到一個表中的數據,後來解決了,嗯,記錄一下: SELECT * FROM 表1 WHERE convert(varchar(10),表1.創建時間,120)=CONVERT(VARCHAR(10),GETDATE(),120) 如果是本月的話: SELECT * F ...
  • Centos6.5之ssh免密碼登錄配置 centos ssh 免密碼登錄 0.說明 這裡為了方便說明問題,假設有A和B兩台安裝了centos6.5的主機。目標是實現A、B兩台主機分別能夠通過ssh免密碼登錄到對方主機。不同主機的配置過程一樣,這裡介紹A主機的配置過程。 事先在AB主機分別創建好要免 ...
  • 一、說明 安裝環境 centos6.6 (64位) python2.7.10 (升級系統預設python版本的方法參見 "在CentOS 6.5上安裝python2.7" ) 約定 工作目錄假定為當前用戶的HOME目錄 安裝的各軟體版本以文檔編寫時的最新版為基準,請結合實際情況參考。 尖括弧""包括 ...
  • 簡介 ABP提供了一個緩存介面,它內部使用了這個緩存介面。雖然介面的預設實現是MemoryCache,但可以用任何其它實現的緩存供應器。Abp.RedisCache包用Redis實現了緩存(查看下方的“Redis 緩存集成”)。 ICacheManager 緩存的主要介面是ICacheManager ...
  • MySqlSugar 3.X API 作為支持.NET CORE 為數不多的ORM之一,除了具有優越的性能外,還擁有強大的功能,不只是滿足你的增,刪,查和改。實質上擁有更多你想像不到的功能,當你需要實現某個功能時會發現有這個功能太棒了。 所有版本 ASP.NET 4.0+ MSSQL https:/ ...
  • 作為物聯網通訊框架,肯定要支持多種通訊鏈路,在多種通訊鏈路的基礎上完成多種通訊協議的交互,例如:Modbus、自定義協議等等。但是,有一個問題:針對同一臺硬體設備或感測器,完成串口和網路兩種通訊方式的數據採集和控制,是否要分別寫代碼?如果從現實角度分析,同一硬體,它要完成的業務邏輯肯定是相同的,所以... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...