本系列我將主要通過圖片和少許文字講解通過個人自研的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實現的應用可高度複用的模塊和組件,這些模塊和組件將獨立設計成爲公共服務系統。