Phenix Framework 7 for .net core 3 + Orleans 3 发布地址:
https://github.com/phenixiii/Phenix.NET7

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,完善轻量级的持久化引擎,入口为Phenix.Core.Data.Database类,Fetch用法参考如下:
         IList<Teams> teamsList = Database.Default.MetaData.FindSheet<Teams>().SelectEntity<Teams>(p => p.Id == 559064445621642);
2,提供Phenix.Core.Data.Model.EntityBase<T>实体基类,封装持久化引擎、动态刷新等基础设施功能,Fetch代码可简化为:
         IList<Teams> teamsList = Team.Select(p => p.Id == 559064445621642);
3,持久化引擎支持在实体属性上打System.ComponentModel.DataAnnotations.ValidationAttribute派生标签,提交对象/属性时会自动完成属性的有效性验证(验证失败抛出ValidationException)
      以下默认规范会自动添加,不必手工打标签:
          System.ComponentModel.DataAnnotations.RequiredAttribute,如果属性值不允许为空的规范是按照表字段NOT NULL的话;
          System.ComponentModel.DataAnnotations.StringLengthAttribute,如果字符串属性值长度要求是按照表字段长度规范的话;
     一旦手工打上标签,可覆盖它们
4,持久化引擎支持在实体上实现System.ComponentModel.DataAnnotations.IValidatableObject接口,也可以实现Phenix.Core.Data.Validity.IValidation接口,提交对象时自动完成对象的有效性验证(验证失败抛出ValidationException)
5,提供实体类代码生成工具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'文档供参考
20190809
1,提供Phenix.Core.Data.Schema.Table配置项ClassNameByTrimTableName,可根据自己Build Entity的需要,规定ClassName属性的取值是否取自被整理的表名(如果第4位是"_"则剔去其及之前的字符),默认是false
2,提供Phenix.Core.Data.Schema.View配置项ClassNameByTrimViewName,可根据自己Build Entity的需要,规定ClassName属性的取值是否取自被整理的视图名(如果第4位是"_"则剔去其及之前的字符, 如果倒数第2位是"_"则剔去其及之后的字符),默认是false
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.Model.DynamicEntity,以便操作IDictionary<string, object>格式的"属性名-属性值"记录数据,如需传入JSON格式请先调用Phenix.Core.Reflection.Utilities.JsonDeserialize<IDictionary<string, object>>(propertyValues)、Phenix.Core.Reflection.Utilities.JsonDeserialize<IList<IDictionary<string, object>>>(propertyValues)进行转换
3,增补Phenix.Core.Data.Schema.Table和Phenix.Core.Data.Schema.View的增删改函数,以便操作IDictionary<string, object>格式的"属性名-属性值"记录数据,如需传入JSON格式数据请先调用Phenix.Core.Reflection.Utilities.JsonDeserialize<IDictionary<string, object>>(propertyValues)进行转换
4,增补Phenix.Core.Data.Schema.Table、Phenix.Core.Data.Schema.View、Phenix.Core.Data.Model.EntityBase<T>的查询函数,可返回JSON格式的查询结果
20190814
1,增补Phenix.Core.Data.Schema.Table、Phenix.Core.Data.Schema.View、Phenix.Core.Data.Model.EntityBase<T>的查询函数,可读取DataReader内容返回实体对象或JSON格式的查询结果
2,增补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,仅允许用户增删改查操作自己所在团队的记录,当前用户的所属团队Identity.CurrentIdentity.User.Name/Id会被作为查询的过滤条件(即单库切片),前提是聚合根对应的表结构务必含制单团体(后缀'_ORIGINATE_TEAMS')字段)
3,如果应用系统还有分库(顺序为1-N),当前用户在增删改查操作时会被自动路由到其中一个库上(index为0主库1-N分库),路由算法是Identity.CurrentIdentity.User.RootTeams.Id的Hash值取N的余数
20190919
1,提供Phenix.Business.BusinessBase<T>可操作聚合树的业务基类,为聚合根对象的整颗聚合树提供编辑操作和持久化的功能
2,一旦为聚合树中某个节点的业务对象打上删除标记(IsSelfDeleted=true),调用SaveDepth()函数持久化时,只要数据库中存在物理外键,将会对它及其下的所有从业务对象(包括未加载到内存)的记录做级联删除
20190920
1,规定将WebAPI服务的Controller代码编写在各自的工程里,程序集的命名以"*.Plugin.dll"作为后缀,默认会被Phenix.Services.Host自动加载并装配到ApplicationParts中
2,发布Phenix.Services.Host时,可自动将Docker相关的文件写入到Publish目录中,方便部署到Docker
20190927
1,提供用户消息PULL和PUSH两套方法,具体见测试网页user-message.html
2,提供服务接口IGateService以扩展系统自身的个性化的登录功能,示例代码见Phenix.Services工程里的GateService类,注入方法见Phenix.Services.Host工程Startup类里的AddGateService()代码行
20191011
1,升级至for .net core 3.0,开发工具 Visual Studio 2019 16.3.x及以上版本
2,提供服务接口IFileService以扩展系统自身的个性化的文件上传下载功能,示例代码见Phenix.Services工程里的FileService类,注入方法见Phenix.Services.Host工程Startup类里的AddFileService()代码行,用法见测试网页file.html
20191013
1,增补'Phenix.Services.Host.部署方法.doc'内容
2,调通Phenix.Services.Host部署在Docker的方法
20191021
1,重构Phenix.Client.HttpClient类
2,phenix7.js和Phenix.Client.HttpClient类的Call函数,补充'是否加密上传数据'、'是否解密返回数据'参数
3,提供业务类代码生成工具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接口,指定它的失效时间以自动被从集合中剔除出去
3,提供具备缓存机制的实体基类Phenix.Core.CachedRootEntityBase<T>和业务基类Phenix.Business.CachedRootBusinessBase<T>
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工程,封装Orleans的客户端和服务集群配置方法和入口,以及一套轻量级的Grain开发框架,支持并行和分布式大规模服务架构设计
2,规定将Orleans服务的Grain及其接口代码编写在各自的工程里,程序集的命名以"*.Plugin.dll"作为后缀,默认会被Phenix.Services.Host自动加载并装配到ApplicationParts中
3,提供Phenix.Services.Plugin工程,包含用户身份验证和管理的UserGrain类、IUserGrain接口,及其代理UserGrain服务的User类,通过UserFactory类注册到Phenix.Core的权限控制模块,注册方法(见Phenix.Services.Host):
         Phenix.Core.Security.Identity.RegisterFactory(new Phenix.Services.Plugin.UserFactory());
 
 

基于.net core 3 和 Orleans 3 的 开发框架:Phenix Framework 7的更多相关文章

  1. YiShaAdmin,基于.NET Core Web开源的后台快速开发框架

    YiShaAdmin YiShaAdmin 基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单,所以我也把她开源了. 她可以用于所有的Web应用程 ...

  2. 基于nopcommerce b2c开源项目的精简版开发框架Nop.Framework

    http://www.17ky.net/soft/70612.html?v=1#0-sqq-1-39009-9737f6f9e09dfaf5d3fd14d775bfee85 项目详细介绍 该开源项目是 ...

  3. 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端

    一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开 ...

  4. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  5. 基于.NET Core的Hypertext Application Language(HAL)开发库

    HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable ...

  6. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

  7. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  8. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...

  9. 基于EF Core的Code First模式的DotNetCore快速开发框架

    前言 最近接了几个小单子,因为是小单子,项目规模都比较小,业务相对来说,也比较简单.所以在选择架构的时候,考虑到效率方面的因素,就采取了asp.net+entity framework中的code f ...

随机推荐

  1. JMETER 计数器的表现

    1.计数器在线程中表现(虚拟用户). 线程组使用4个线程即4个虚拟用户. 如果不勾选每用户独立跟踪计数器. 那么这个计数器将会累加4次. 计算结果为7. 勾选的情况. 这里我们可以看到 index 一 ...

  2. [原创]python+beautifulsoup爬取整个网站的仓库列表与仓库详情

    from bs4 import BeautifulSoup import requests import os def getdepotdetailcontent(title,url):#爬取每个仓库 ...

  3. SHELL脚本和常用命令

    什么是脚本? 脚本简单地说就是一条条的文字命令(一些指令的堆积),这些文字命令是可以看到的(如可以用记事本打开查看.编辑). 常见的脚本: JavaScript(JS,前端),VBScript, AS ...

  4. 201871010105-曹玉中《面向对象程序设计(java)》第七周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  5. python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序

    exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...

  6. MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  7. 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  8. 原生/CM系列网络叹号问题

    网络叹号问题: 原因:某墙屏蔽了谷歌,而原生安卓是利用谷歌的服务器来测试网络是否通畅的 解决方案:修改网络测试的服务器地址 方案来源:https://www.noisyfox.io/android-c ...

  9. 关于Design Complier/Library Compiler的跌坑(坑爹)记录

    最近需要用DC做一些事,然后需要转库,中午偷个闲,特来记录一下中间的一些坎坷. 1.首先是要转库.我们只有.lib文件的格式,所以需要把.lib文件转换成.db格式.然后坑来了!!!DC2015及以后 ...

  10. 是时候解决 students's Test 假设检验(显著性检验)了

    T test 由来已久 T 检验的概念 假设检验的步骤 假设检验可以分为三步: 建立检验假设和确定检验水准 单侧检验与双侧检验 选定检验方法和计算检验统计量 确定P值和做出推断结论 假设检验的两类错误 ...