本系列我將主要通過圖片和少許文字講解通過個人自研的PowerDotNet進行快速開發平臺化軟體產品。
PowerDotNet不僅僅是包含像Newtonsoft.Json、Dapper、Quartz、Redis、ZooKeeper、ElasticSearch、ETCD、Autofac、JWT、MyBatis、EF、RabbitMQ、ObjectPool、Hessian、Thrift、gRPC、SuperSocket等流行的類庫和元件,像ABP、SpringBoot之類的開發框架套件和工具,它還是一整套完善的前後端(支援傳統BS和CS結構,也支援H5和APP)快速開發和簡易運維解決方案。它的最大優勢是深刻理解了一線平臺開發和業務開發人員的核心訴求,在此基礎上進行提取和抽象,並且實現了公共元件核心功能開發,提供了良好的操作UI介面,對開發和運維人員非常友好。
PowerDotNet致力於系統應用開發服務化、平臺化、自動化和產品化,到目前為止已成功開發出服務治理、配置中心、任務排程、CRM、應用和系統管理、叢集管理、伺服器管理、域名管理、資料同步、日誌管理、檔案管理、訊息管理、支付平臺等公共服務產品,開箱即用。整個程式碼實現都朝著“簡單高效”、“高內聚”、“低耦合”、“兼具功能和效能”、“優雅漂亮有品位”的方向努力,所有核心邏輯都有單元測試覆蓋 ,不拘泥於語法糖和框架,務實不炫技,面向介面程式設計 ,可擴充套件性非常強。
PowerDotNet是我個人多年軟體開發實踐和架構設計經驗的彙總,很多都經過生產環境的考驗,我認為還是相當靠譜的,敝帚自珍,與同道中人分享,不亦樂乎。
第一篇從最簡單的基礎資料平臺開始說起。
一、需求來源
現代軟體基本離不開各種各樣的基礎資料。比如全域性都可以使用的區域、證件型別、二字碼、三字碼、通用字典等資料;和業務有點關聯的公司、組織、級別等資料;和業務緊密關聯的業務基礎資料,如商品主資料等。
對這些資料的管理,是非常費力不討好的事情,因為很多人,主要就是各種高大上的管理人士,認為這些對提升業務沒啥價值。
但是,設計和管理不好,後期又會造成開發難題。很多公司基礎資料散佈在各種子系統中,連保證資料的基本正確統一都做不到,所以必須重視這些基礎但是看上去沒啥技術含量的東西。
二、系統抽象
平臺,可以理解為一個完備的業務系統,而系統由單個或多個應用(獨立程序)構成。
本文不討論系統和應用的關係,只按照自己的正常理解來開發業務系統。
具體到基礎資料平臺的開發,業務功能看上去比較簡單,主要就是資料的CRUD而已。
按照正常需求理解,我們可以肯定至少需要開發兩個應用:
1、帶介面的管理後臺
2、不帶介面的對外開放的介面
不需要複雜冗餘的架構設計,簡易分層架構如下(截圖只是冰山一角,實際專案比這複雜多了):
三、管理後臺
具體CRUD實現就不看了,本文技術選型為Asp.Net MVC,看幾個截圖就好。
1、區域管理
區域管理支援大洲、國家或地區、省、市、區縣、鄉鎮或街道、社群或居委會或村委會這幾級,滿足了大部分公司常見的區域功能需求。
2、IP地址
3、證件型別
4、通用字典
四、WebApi介面
介面也好說,簡單定義幾個查詢介面,整合流行的Swagger。
有人可能會說,你這個WebApi介面命名很不講究,不規範,應該多用名詞少用動詞,應該注意區分GET、POST、PUT、DELETE等方法,還要注意快取blablabla。
本文不講WebApi命名,後續文章將介紹服務治理,到時候你會發現WebApi起名真的不重要,服務治理平臺徹底解決REST API命名難題,開發人員只需要關心業務邏輯實現就好。
WebApi還可以開發成使用OWIN或者其他非IIS形式的宿主,截圖裡WinService目錄使用的是Windows服務實現webapi宿主。下面示例截圖是WinForm宿主的WebApi:
注意,真正的基礎資料平臺功能比這個複雜太多太多了,單純一個業務主資料就夠喝一壺的,本文截圖只做講解用。
五、其他RPC協議介面
在.NET開發框架下,我們基本都會熟練寫出基於HTTP協議的WebApi、WebService、WCF甚至上古時期的.NET Remoting介面,以及個人實現的RPC專案Power.Apix,咩哈哈。
隨著.NET Core的大流行,很多其他RPC協議的介面被廣泛使用,如Hessian、Thrift、gRPC等。
PowerDotNet自動集成了Hessian、Thrift、gRPC協議的介面解決方案,實現起來幾個模板類就可以搞定。
PowerDotNet讓不同協議的介面開發變得無比簡單易用。配合後續要講到的服務治理,你就知道PowerDotNet的優秀設計與實現是多麼的富有創新,咩哈哈哈,有點過分自信了。
本文重點不是講這些協議如何整合,後續有時間再說。
六、.NET Core實現
.Net Core已經越來越成為.Net開發者的首選開發平臺,作為資深開發人員,當然更要積極擁抱.Net Core。雖然PowerDotNet積累的歷史比較久遠,但是在.Net Core1.0時代就有一個.NET Core實現計劃PowerDotNetCore,目前主要實現是基於.NET Core2.0,正在開發完善當中。
實現WebApi介面或者管理後臺頁面非常輕鬆。
後續有機會再介紹PowerDotNetCore。
七、提取可複用功能
除了WebApi,我們還可以開發其他形式的API服務,比如WCF、WebService、.Net Remoting、Thrift、gRPC等。
開發不同形式的應用時,我們發現,還可以抽象出應用(程序)上公共的可複用的部分。比如,這些應用都需要連線資料庫,都需要讀取配置檔案,都需要部署至測試、生產等環境,以及無處不在的日誌記錄等。
那麼這些應用上公共可複用的部分是否能夠抽象出來,供更多的應用開發複用?答案是顯而易見的。
PowerDotNet在複用公共功能、可維護性、可擴充套件性上有更高級別的抽象。
下面幾篇文章將介紹PowerDotNet實現的應用可高度複用的模組和元件,這些模組和元件將獨立設計成為公共服務系統。