快速开发框架CRL3.0发布,附带最新的项目示例CRLShoppingDemo
继上次使用CRL实现大数据分库分表方案升级到2.4,时隔不久又升级到了大版本号3.0,主要是因为结构发生了一些更改
ORM和业务封装Package分开了,增加了实例项目演示代码CRLShoppingDemo,整体项目结构如下

3.0更新内容如下:
--
升级改到3.0版,.X版不再更新
--
Model索引值类型改为dynamic
减少QueryList方法参数
--
重载了BaseProvider
增加了in select查询
--
增加Equals扩展方法解析
--
优化了PackageTrans方法,去掉暴露在外面的事务控制方法
去掉了SetContext方法,使用TransactionScope实现整体事务
账户系统去掉SQL写法,改为对象
--
修改了创建表时数据初始,改为在Model实现GetInitData
修改了缓存null判断
数据访问对象dbHelper改名为DBExtend
--
更改字段别名返回和处理,不需专门传映射关系
QueryFromAllCache方法名 改为QueryFromCache
增加CRL演示项目
以上更新在3.0开发文档中都有体现
主要功能更新讲解
1.In select 创建一个等效的关联in 查询,也有相对的Not In
//等效为 product.UserId in(select UserId from order where product.SupplierId=10 and order.status=2)
query.In<Code.Order>(b => b.UserId, b => b.UserId, (a, b) => a.SupplierId == "10" && b.Status == 2);
2.Equals 扩展方法,类型不同的字段和参数,能用此方法进行相等判断了,省去了转换方法
query.Where(b => b.UserId.Equals(Code.ProductChannel.其它));//按值等于,enum等于int
3.统一事务调用方法PackageTrans,不用再手动回滚了
public bool TransactionTest(out string error)
{
//简化了事务写法,自动提交回滚
return PackageTrans((out string ex) =>
{
ex = "";
var product = new ProductData();
product.BarCode = "sdfsdf";
product.Number = ;
ProductDataManage.Instance.Add(product);
//return false; //会回滚
product = new ProductData();
//product.BarCode = "sdfsdf2";
//product.Number = 12;
ProductDataManage.Instance.Add(product);//不符合数据校验规则,将会抛出异常,会回滚
//return false;
return true;
}, out error);
}
4.初始数据改在Model里重写GetInitData方法了,当对象表创建时,数据也会创建
/// <summary>
/// 产品
/// </summary>
public class Product : CRL.Package.Product.ProductBase
{
/// <summary>
/// 初始默认数据
/// </summary>
/// <returns></returns>
public override System.Collections.IList GetInitData()
{
var list = new List<Product>();
for (int i = ; i < ; i++)
{
list.Add(new Product() { ProductName = "测试产品" + i, SettlementPrice = , SoldPrice = , SupplierId = , ProductStatus = CRL.Package.Product.ProductStatus.已上架 });
}
return list;
}
}
演示项目CRLShoppingDemo
之前有人提到看不懂文档,希望有简单的例子,如你所愿,按基本在线销售系统写了一个Demo,以下为运行效果

此演示项目正如上面所说,采用了精简的写法实现了这些业务

继承业务封装,实现会员管理
public class MemberManage : CRL.Package.Person.PersonBusiness<MemberManage, Member>
商家和会员就都有了登录和验证方法,并实现Form认证
public ActionResult Login(Model.Member member)
{
string error;
var a = MemberManage.Instance.CheckPass(member.AccountNo, member.PassWord, out error);
if (!a)
{
ModelState.AddModelError("", error);
return View();
}
var u = MemberManage.Instance.QueryItem(b => b.AccountNo == member.AccountNo);
if (u.Locked)
{
ModelState.AddModelError("", "账号已锁定");
return View();
}
MemberManage.Instance.Login(u, "Member", false);
string returnUrl = Request["returnUrl"];
if (string.IsNullOrEmpty(returnUrl))
{
returnUrl = "/";
}
return Redirect(returnUrl);
}
页面上需要取当前用户,通过Form认证返回统一的Person对象
var user = MemberManage.Instance.CurrentUser;//CRL.Package.Person.Person
类似FindOne,FindList,分页方法不用去傻傻的写很多次了(一般三层结构会把这类方法写N次),已经自动转换好了
var item = ProductManage.Instance.QueryItemFromCache(b => b.Id == id);//从缓存查询
var item = ProductManage.Instance.QueryItem(b => b.Id == id);//从数据库查找 //分页
var query = ProductManage.Instance.GetLambdaQuery();
query.Where(b => b.SupplierId == CurrentUser.Id);
int count;
var result = ProductManage.Instance.Page(query, out count);
内置账户交易系统,解决多种类型支付管理问题
可以给N种角色设置N种货币类型,统一进行管理
比如以下是充值现金到会员
public bool Charge(Member member, decimal amount, string remark, TransactionType transactionType, out string error)
{
var account = Transaction.AccountManage.Instance.GetAccountId(member.Id, Model.AccountType.会员, transactionType);
string orderId = DateTime.Now.ToString("yyMMddhhmmssff");
int tradeType = ;
var trans = new List<CRL.Package.Account.Transaction>();
var ts = new CRL.Package.Account.Transaction() { AccountId = account, Amount = amount, OperateType = CRL.Package.Account.OperateType.收入, TradeType = tradeType, OutOrderId = orderId, Remark = remark };
trans.Add(ts); bool b = Transaction.TransactionManage.Instance.SubmitTransaction(out error,true, trans.ToArray());//提交流水
return b;
}
确认订单时扣款,同时赠送积分
var accountUser = Transaction.AccountManage.Instance.GetAccount(order.UserId, Model.AccountType.会员, Model.TransactionType.现金);
var accountUser2 = Transaction.AccountManage.Instance.GetAccount(order.UserId, Model.AccountType.会员, Model.TransactionType.积分);
if (accountUser.AvailableBalance < order.TotalAmount)
{
error = "账户余额不足";
return false;
} int tradeType = ;
var amount = order.TotalAmount;
var orderId = order.OrderId;
var remark = "订单支付";
var trans = new List<CRL.Package.Account.Transaction>();
//生成会员交易流水
var ts = new CRL.Package.Account.Transaction() { AccountId = accountUser.Id, Amount = amount, OperateType = CRL.Package.Account.OperateType.支出, TradeType = tradeType, OutOrderId = orderId, Remark = remark };
trans.Add(ts);
//赠送积分
var ts3 = new CRL.Package.Account.Transaction() { AccountId = accountUser2.Id, Amount = amount, OperateType = CRL.Package.Account.OperateType.收入, TradeType = tradeType, OutOrderId = orderId, Remark = "赠送积分" };
trans.Add(ts3);
bool b = Transaction.TransactionManage.Instance.SubmitTransaction(out error, trans.ToArray());//提交流水
if(!b)
{
return false;
}
更多详细写法请对照示例和开发文档
示例源码(不包含CRL源码) http://pan.baidu.com/s/1mg1YDqK
没什么人关注,为增加人气,CRL3.0完整源码请入群获取,谢谢支持
快速开发框架CRL3.0发布,附带最新的项目示例CRLShoppingDemo的更多相关文章
- spring-boot-plus后台快速开发框架1.0.0.RELEASE发布了
spring-boot-plus spring-boot-plus是一套集成spring boot常用开发组件的后台快速开发框架 官网地址:springboot.plus GITHUB:https:/ ...
- 2020新Asp.NET敏捷快速开发框架7.0.5旗舰版源码asp.net mvc框架,工具类CRM,工作流
演示地址: http://frame3.diytassel.com 用户名:system 密码:0000 需要的联系QQ:22539134 一.新添加了 1.多语言功能: 2.代码生成器模版 ...
- CRL快速开发框架升级到3.1
CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...
- [开源]OSharpNS - .net core 快速开发框架 - 快速开始
什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...
- [开源]OSharpNS - .net core 快速开发框架 - 简介
什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...
- JWinner:一个私人定制的快速开发框架,为理想而生
关于JWinner JWinner是一个JAVA项目的快速开发框架,他已经实现了大多数项目开发之前需要进行的一些必备工作,还有很多在开发过程中可能会用到的工具集. JWinner的诞生并不是一蹴而就的 ...
- 微信公众平台快速开发框架 For Core 2.0 beta –JCSoft.WX.Core 5.2.0 beta发布
写在前面 最近比较忙,都没有好好维护博客,今天拿个半成品来交代吧. 记不清上次关于微信公众号快速开发框架(简称JCWX)的更新是什么时候了,自从更新到支持.Net Framework 4.0以后基本上 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理
在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增查询引擎管理
欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 RDIFramework.NET — 基于.NET的快速信 ...
随机推荐
- [虾扯蛋] android界面框架-Window
从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- 戏说HTML5
如果有非技术人员问你,HTML5是什么,你会怎么回答? 新的HTML规范... 给浏览器提供了牛逼能力,干以前不能干的事...(确切地说应该是给浏览器规定了许多新的接口标准,要求浏览器实现牛逼的功能. ...
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
- SQL必备知识点
经典SQL语句大全 基础 1.说明:创建数据库.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 device.说明:创建新表crea ...
- jquery.Callbacks的实现
前言 本人是一个热爱前端的菜鸟,一直喜欢学习js原生,对于jq这种js库,比较喜欢理解他的实现,虽然自己能力有限,水平很低,但是勉勉强强也算是能够懂一点吧,对于jq源码解读系列,博客园里有很多,推荐大 ...
- Android 7.1 - App Shortcuts
Android 7.1 - App Shortcuts 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Shortcuts 文中如有纰漏,欢迎大家留言 ...
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
- 编译器开发系列--Ocelot语言3.类型名称的消解
"类型名称的消解"即类型的消解.类型名称由TypeRef 对象表示,类型由Type 对象表示.类型名称的消解就是将TypeRef 对象转换为Type 对象. TypeResolve ...