基於.net core 3 和 Orleans 3 的 開發框架:Phenix Framework 7


Phenix Framework 7 for .net core 3 & Orleans 3
Copyright © 2007, 2020 Phenixヾ Studio
發布地址:https://github.com/phenixiii/Phenix.NET7
技術交流群:206648373

20190522
1,發布輕量級的持久化引擎,支持Oracle、MySQL,封裝ADO.NET,可同時操作多個(主庫+分庫)數據庫
2,提供數據庫的數據字典的查看方法,示例見Demo.Phenix.Core.Data.Schema
3,提供存放日志到本地或數據庫的通用方法,示例見Demo.Phenix.Core.Log.EventLog
4,提供系統唯一的序列號,支持多線程、多進程、分布式應用,示例見Demo.Phenix.Core.Data.Sequence
5,提供連續遞增的序列號,支持多線程、多進程、分布式應用,示例見Demo.Phenix.Core.Data.Increment
6,提供直接讀取數據庫數據DataReader功能,示例見Demo.Phenix.Core.Data.Common.DataReader

20190715
1,持久化引擎支持在實體屬性上打System.ComponentModel.DataAnnotations.ValidationAttribute派生標簽,提交對象/屬性時會自動完成屬性的有效性驗證(驗證失敗拋出ValidationException)
      以下默認規范會自動添加,不必手工打標簽:
          System.ComponentModel.DataAnnotations.RequiredAttribute,如果屬性值不允許為空的規范是按照表字段NOT NULL的話;
          System.ComponentModel.DataAnnotations.StringLengthAttribute,如果字符串屬性值長度要求是按照表字段長度規范的話;
     一旦手工打上標簽,可覆蓋它們
2,持久化引擎支持在實體上實現System.ComponentModel.DataAnnotations.IValidatableObject接口,也可以實現Phenix.Core.Data.Validity.IValidation接口,提交對象時自動完成對象的有效性驗證(驗證失敗拋出ValidationException)
3,提供實體類代碼生成工具Phenix.Tools.EntityBuilder工程源碼

20190804
1,提供WebAPI服務端Phenix.Services.Host工程源碼
2,提供WebAPI服務的phenix7.js客戶端源碼,見Phenix.Services.Host\wwwroot\lib目錄,測試代碼見Phenix.Services.Host\wwwroot\test

20190807
1,Phenix.Services.Host可部署在KestrelServer+Docker環境中
2,提供《Phenix.Services.Host.部署方法.doc》文檔

20190813
1,Phenix.Core.Data.Database和Phenix.Core.Data.Common.DbCommandHelper的調用存儲過程函數ExecuteStoredProc,返回值改為IDictionary<string, object>類型,為存儲過程的調用結果集"參數名-參數值",如需轉換為JSON格式請調用Phenix.Core.Reflection.Utilities.JsonSerialize(result)
2,增補Phenix.Core.Data.Schema.Table、Phenix.Core.Data.Schema.View、Phenix.Core.Data.Model.EntityBase<T>的查詢函數,可讀取DataReader內容返回實體對象或JSON格式的查詢結果
3,增補Phenix.Core.Data.Common.DataReader的SelectRecord()函數,直接導出JSON格式的查詢結果,JSON格式的屬性名為數據源的表/視圖的字段名/別名

20190905
1,提供Phenix.Client工程,含HttpClient類Checkin、Logon、ChangePassword、Sequence、Increment、Message、UploadFile、DownloadFile、EventLog、Call等系列函數,示例代碼見:Demo.Phenix.Client.HttpClient_Message、Demo.Phenix.Client.HttpClient_File
2,提供Phenix.Business工程,含Phenix.Business.UndoableBase<T>可撤銷編輯的實體基類,為實體對象的編輯操作提供單級回滾的功能,示例見Demo.Phenix.Business.UndoableBase
3,約定時間戳字段以'_TIMESTAMP'后綴命名
4,增補Phenix.Core.Data.Model.EntityBase<T>功能具備樂觀鎖機制,Update()和UpdateRecord()函數提供checkTimestamp參數(默認true),保證在分布式架構下新數據不會被臟數據覆蓋(會拋出Phenix.Core.Data.Validity.OutdatedDataException)

20190911
1,除了主鍵(后綴'_ID')、制單人(后綴'_ORIGINATOR')、制單時間(后綴'_ORIGINATE_TIME')、制單團體(后綴'_ORIGINATE_TEAMS')等水印字段外,約定系統自定義的水印字段用后綴'_WM'進行標識,以便在新增記錄以后的歷次修改中,這些字段都不會再被改動(即使編輯過實體對象也不會被持久化)
2,提供Phenix.Business.BusinessBase<T>可操作聚合樹的業務基類,為聚合根對象的整顆聚合樹提供編輯操作和持久化的功能
3,一旦為聚合樹中某個節點的業務對象打上刪除標記(IsSelfDeleted=true),調用SaveDepth()函數持久化時,只要數據庫中存在物理外鍵,將會對它及其下的所有從業務對象(包括未加載到內存)的記錄做級聯刪除

20190920
1,規定將WebAPI服務的Controller代碼編寫在各自的工程里,程序集的命名以"*.Plugin.dll"作為后綴,默認會被Phenix.Services.Host自動加載並裝配到ApplicationParts中
2,發布Phenix.Services.Host時,可自動將Docker相關的文件寫入到發布目錄(Publish目錄)中,方便部署到Docker
3,提供用戶消息PULL和PUSH兩套方法,具體見測試網頁user-message.html

20191011
1,升級至for .net core3.0,開發工具 Visual Studio 2019 16.3.x及以上版本
2,提供服務接口IFileService以擴展系統自身的個性化的文件上傳下載功能,框架代碼見Phenix.Services.Extend工程里的FileService類,注入方法見Phenix.Services.Host工程Startup類里的AddFileService()代碼行,用法見測試網頁file.html

20191013
1,修訂《Phenix.Services.Host.部署方法.doc》
2,調通Phenix.Services.Host部署在Docker的方法

20191021
1,phenix7.js和Phenix.Client.HttpClient類的Call函數,補充'是否加密上傳數據'、'是否解密返回數據'參數
2,提供業務類代碼生成工具Phenix.Tools.BusinessBuilder工程源碼

20191030
1,新增Phenix.Core.Threading.Timer類,提供定時執行任務功能,通過AddTimedTask()函數添加已實現Phenix.Core.Threading.ITimedTask接口的對象,會自動按照指定周期在一個獨立線程里執行這個對象的Execute()函數
2,Phenix.Core.SyncCollections命名空間的集合類,都已實現Phenix.Core.Threading.ITimedTask接口,只要通過AddTimedTask()函數加入到Phenix.Core.Threading.Timer的定時執行任務隊列里,會自動按照指定周期清理集合對象里過期的集合項,前提條件是集合項對象需實現Phenix.Core.SyncCollections.ICachedObject接口,指定它的失效時間以自動被從集合中剔除出去

20191102
1,提供非對稱加密的公鑰私鑰生成工具Phenix.Tools.CreateKeyPair工程源碼
2,數據庫連接串配置記錄存放在Phenix.Core.db(推薦使用SQLite Expert工具打開)庫文件PH7_Database表里,以便在程序運行時無需通過編寫代碼注冊數據庫入口,可直接獲取Phenix.Core.Data.Database對象,具體配置方法見示例記錄的Remark字段內容
3,注釋掉Phenix.Services.Host工程里的數據庫入口注冊代碼,改用Phenix.Core.db庫文件PH7_Database表做數據庫連接串的配置

20191205
1,提供Phenix.Actor工程源碼,封裝Orleans3的客戶端和服務集群配置方法和入口,以及一套輕量級的Actor開發框架,支持並行和分布式大規模服務架構設計
2,規定將Orleans服務的Grain及其接口代碼編寫在各自的工程里,程序集的命名以"*.Plugin.dll"作為后綴,默認會被Phenix.Services.Host自動加載並裝配到ApplicationParts中
3,提供Phenix.Services.Plugin工程源碼,包含用戶身份驗證和管理的UserGrain類、IUserGrain接口,及其代理UserGrain服務的UserProxy類,通過UserProxyFactory類注冊到Phenix.Core的權限控制模塊,注冊方法(見Phenix.Services.Host):
         Phenix.Core.Security.Identity.RegisterFactory(new Phenix.Services.Plugin.UserProxyFactory());

20191216
1,升級至for .net core3.1 + SignalR3.1 + Orleans3.1
2,調通Phenix.Services.Host\wwwroot\test目錄的測試網頁

20191227
1,提供《Phenix.Services.Host.分布式服務架構.pptx》,講解WebAPI(應用)服務和Orleans(領域)服務的搭建和部署方法
2,提供Phenix.Core.AppSettings應用系統配置工具,配置項定義方法參考Phenix.Services.Host的OrleansConfig類,系統實施時可直接在Phenix.Core.db庫文件PH7_AppSettings表里做配置

20200107
1,微調Phenix.Actor工程的功能
2,添加Demo_Practice目錄,用於存放實戰演練項目的代碼
3,添加Demo.InventoryControl庫存管控演練項目到Demo_Practice目錄
4,InventoryControl演練第一步,完成貨架裝卸貨物的記錄功能,見Demo.InventoryControl.Plugin_MySQL工程

20200113
1,提供Phenix.Algorithm工程源碼,含ZeroOneKnapsackProblem類的0-1背包算法,用法見Demo.Phenix.Algorithm.CombinatorialOptimization.ZeroOneKnapsackProblem工程
2,完善Phenix.Core.AppSettings類的功能

20200116
1,豐富Phenix.Algorithm工程ZeroOneKnapsackProblem類的功能,添加"打包至少占有一定容量"、"打包至少占有一定容量且不低於一定價值"、"趨向最小規格且不考慮打包價值/只要滿足最低打包價值"等約束條件
2,豐富Demo.Phenix.Algorithm.CombinatorialOptimization.ZeroOneKnapsackProblem工程的演示代碼

20200205
1,為Phenix.Algorithm工程添加BunchKnapsackProblem類,從M支集束的N個物品中挑選出一個盡可能整支和價值高的子集使其裝滿容量為W且允許有一定超載范圍的背包
2,InventoryControl演練第二步,完成從Area-Alley-Location逐層自動挑貨的標記功能,見Demo.InventoryControl.Plugin_MySQL工程

20200213
1,為Phenix.Actor工程封裝Orleans Streams功能,見StreamProvider類
2,為Demo.InventoryControl.Plugin_MySQL工程添加Demo.InventoryControl.Plugin.oom設計文檔
3,添加Demo.InspectionStation檢查站作業演練項目到Demo_Practice目錄
4,InspectionStation演練第一步,完成各作業點的地磅和車牌號的數據上報和讀取、閘口的放行,作業點動態信息的發布和訂閱,見Demo.InspectionStation.Plugin_MySQL工程

20200217
1,升級用戶消息發布和訂閱功能,允許在單一的消息ID上持續發送消息,可用於數據監控等業務場景,示例代碼見:Demo.Phenix.Client.HttpClient_Message
2,為Phenix.Actor工程添加StreamEntityGrainBase類,可支持網格化的消息發布和訂閱機制
3,InspectionStation演練第二步,中控的WebAPI客戶端可訂閱指定的多個作業點的動態信息,通過SignalR的推送機制實時獲取到最新數據,見Demo.InspectionStation.Plugin_MySQL工程

20200220
1,修訂《Phenix.Services.Host.部署方法.doc》,補充'開發環境的搭建'等章節
2,補充和修訂Demo.InspectionStation和Demo.InventoryControl的設計文檔
3,提供《Phenix.Services.Host.分布式服務插件.pptx》,講解WebAPI(應用)服務和Orleans(領域)服務的設計和開發方法

20200224
1,重構Phenix.Core持久化引擎,強調聚合和聚合根的領域對象模型,在采取分庫分表策略的數據庫部署場景下,一棵聚合樹里的所有對象都隨聚合根對象一起鎖定在某個分庫上進行持久化,持久化的路由算法是取自聚合根對象里一個映射'_RU'后綴字段的屬性值經HASH取余得到具體的分庫ID
2,重構Phenix.Core權限控制模塊,借助Phenix.Services.Plugin工程實現分布式部署
3,重構Phenix.Actor工程,精簡EntityGrainProxyBase僅限於實體Grain的代理功能

20200303
1,梳理Phenix.Core持久化引擎
2,提供《Phenix.Core.Data.持久層開發接口.doc》,講解Phenix.Core持久化引擎的數據庫集群、主庫+分庫、分庫分表策略、使用接口和持久層開發方法

20200315
1,為Phenix.Services.Host工程添加Dashboard插件,可在瀏覽器上打開可視化Silo監控工具:http://localhost:8080/
2,完善Phenix.Core.AppSettings功能,類似Phenix.Core.Data.Database.Fetch()函數會自動加密Phenix.Core.db庫文件PH7_Database表Password字段值,ReadValue()函數也會加密PH7_AppSettings表Value字段值
3,為Phenix.Core工程添加Plugin功能(命名空間為Phenix.Core.Plugin),用於動態加載和管理包含有實現了IPlugin接口的插件類的程序集
2,修訂Phenix.Tools.EntityBuilder、Phenix.Tools.BusinessBuilder代碼生成問題,增補'protected override void InitializeSelf()'函數代碼生成功能,用於填充表字段默認值

20200408
1,修訂《Phenix.Services.Host.部署方法.doc》的"服務組件的開發和部署"章節
2,添加《Phenix.Core.Data.持久層開發接口.doc》的"用DataReader獲取實體對象/JSON的Sheet方法"章節
3,修訂Phenix.Core.Log.EventLog功能,可防止連續寫同一message造成本地日志瞬時暴漲的問題,中斷重復日志強度閾值由靜態屬性BreakRepeatIntensityPerMinute控制,缺省為重復日志超過每分鍾6000次
4,修訂用戶身份驗證功能,可防止同一用戶高頻訪問服務,中斷服務請求強度閾值由Phenix.Core.Security.User的BreakRequestIntensityPerMinute靜態屬性控制,缺省為服務請求超過每分鍾6000次
5,為Phenix.Actor工程添加TreeEntityGrainBase、StreamTreeEntityGrainBase、TreeEntityGrainProxyBase類,以支持樹狀結構Kernel的處理
6,豐富Phenix.Services.Plugin工程功能,注冊用戶可搭建起組織架構成為公司管理員,示例見Demo.Phenix.Client.Security.Identity_MyselfRootTeams

20200510
1,豐富Phenix.Algorithm工程ZeroOneKnapsackProblem、BunchKnapsackProblem的功能,可支持超大規格(容量)背包的運算
2,持久化引擎支持PostgreSQL,解決方案Phenix.NET7_PgSQL.sln,程序集輸出目錄Bin_PgSQL,配置庫Phenix.Core.db已升級

20200516
1,提供Phenix.Core.Data.Schema.Table配置項ClassNameByTrimTableName(默認false),可根據自己Build Entity的需要設置類名取自被整理(如果第PrefixCount(默認3)位后是"_"則剔去其及之前的字符)的表名
2,提供Phenix.Core.Data.Schema.View配置項ClassNameByTrimViewName(默認false),可根據自己Build Entity的需要設置類名取自被整理(如果第PrefixCount(默認3)位后是"_"則剔去其及之前的字符, 如果第SuffixCount(默認1)位前是"_"則剔去其及之后的字符)的視圖名
3,提供Phenix.Core.Data.Schema.Column配置項FieldNameByTrimColumnName(默認true),可根據自己Build Entity的需要設置類的字段名和屬性名取自被整理(如果第PrefixCount(默認2)位后是"_"則剔去其及之前的字符)的表/視圖字段名
4,豐富Phenix.Services.Plugin工程功能,公司管理員可為自己員工注冊用戶,為其配上所在團隊(自己公司組織架構上的某個節點)、所擔崗位,鎖定/解鎖、注銷/恢復

20200523
1,修復跨域問題
2,修復系統管理員(用戶名ADMIN,默認密碼ADMIN)第一次無法登錄注冊的問題,並可增刪改系統的崗位定義
3,提供Phenix.Core.Data.Rule.ValidationException數據驗證異常類,用於把ValidationMessage對象拋到客戶端,客戶端利用ValidationMessage.StatusCode屬性(取100以上的整型值)分類處理系統的業務事件ValidationMessage.ErrorMessage
4,增補Phenix.Core.Net.Api.ControllerBase的SelectRecord()函數,直接打包到分頁查詢結果DataPageInfo對象,DataPageInfo的DataName為實體類名,DataSize為數據量,PageNo為頁碼,PageSize為分頁大小,PageBody為當前頁JSON格式的記錄數據
 

待開發:
1,為持久化引擎添加動態查詢功能,可在UpdateEntity、UpdateRecord、DeleteRecord、SelectEntity、SelectRecord時傳入查詢對象參數
2,添加《Phenix.Core.Data.持久層開發接口.doc》的"查詢條件類"章節
3,添加《Phenix.Core.Security.身份驗證方法.doc》
3,適配雙活數據中心的Actor狀態跨地域同步機制
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM