随笔分类 -  A2D Framework

摘要:我们来打造一个简单的专用于json调用的mvc实现,最终会将如下的C#代码暴露给js调用(代码在最后面有下载):public class UserController { public static Json GetUser( [HttpQueryString("x_user")] int userId, [HttpQueryString("msg")] ... 阅读全文
posted @ 2014-03-27 08:08 McKay 阅读(2672) 评论(5) 推荐(2) 编辑
摘要:用设计模式、AOP能将一个方法/函数包裹起来,并且插入额外的逻辑行为,不过动作比较大,不是很灵活,下面介绍一种链式调用方法来封装的代码,完成后能实现如下的链式调用:public class BO { public bool Add(string msg) { Console.WriteLine("Add"); if (msg == null) throw new Exception(); return true... 阅读全文
posted @ 2014-03-26 18:05 McKay 阅读(1865) 评论(2) 推荐(2) 编辑
摘要:SUMMARY能做什么DEMO原理图应用场景能做什么A2DFramework的事件机制是基于发布订阅模式改进得来的一套API,中间件部分实现了msmq、redis、Supersocket可替换。能够实现较彻底的模块事件传递过程中的解耦,支持分布式环境。由于订阅端采用了消息队列作为转发层,因此也能支持事件量很大的场景。DEMODemo工程下载地址(可右键保存):发布订阅Demo.rar一、建立各个工程,并且加入A2DFramework.EventService的引用二、给各个工程加入A2D基本代码,如下:A2DFramework.Starter.Init();A2DFramework.Queue 阅读全文
posted @ 2014-03-18 21:39 McKay 阅读(1950) 评论(4) 推荐(2) 编辑
摘要:SUMMARY用途DEMO演示NuGet相关的资料VS工具端的设置用途数据验证的作用很重要,目前.NET提供的内建验证机制是采用DataAnnotation方式来实现属性的验证,并且也提供了很多验证Attribute,如下图:不过缺点也有:没有基于场景的验证支持如订单Entity如果是PC录入,则要求验证完整的属性有效性如果是Mobile录入,则要求验证一部分属性有效性如果是后台admin录入,则要求最小属性有效性硬编码导致不灵活生产环境中的维护成本,重新编译、测试、上线管理人员无法修改规则,只能通过开发部门基于上述2点,做了些改进,填补上述缺点DEMO演示先建立工程,然后用NuGet工具引用 阅读全文
posted @ 2014-03-18 08:31 McKay 阅读(1787) 评论(5) 推荐(2) 编辑
摘要:WCF,很好,却又麻烦,很多时候不想用WCF的原因就是:用这个真麻烦...麻烦的地方,比如:一堆一堆的服务配置,散落在一个一个的folder下,更新系统时容易出错客户端除了要知道WCF Contract外,还要知道服务Provider所在位置所以想了个办法来简化这些,主要思路是:加入Internal Communication Service,简称ICS。用来插入自定义的中间层编写一个Service Locator Service,用来将WCF服务提供者信息抽取统一保存,如:url, endpoint类型,做到wcf服务提供者位置无关性完成后,WCF客户端(包括WCF服务内部调用了其他WCF服 阅读全文
posted @ 2014-02-13 13:55 McKay 阅读(2540) 评论(2) 推荐(4) 编辑
摘要:所要做的是简化msmq的调用代码以及做到可替代性,实现后,调用消息队列代码变为如下所示:QueueService srv = QueueService.Instance();//检查存储DTO1的队列是否存在,如不存在则自动建立srv.Prepare();//发送类型为DTO1的消息srv.Send(new DTO1() { p1="1", p2="2" });//发送类型为DTO1的消息,并且将发送的消息Id保存到msgId变量中string msgId=srv.Send(new DTO1() { p1 = "1", p2 = &q 阅读全文
posted @ 2014-02-12 15:20 McKay 阅读(4379) 评论(3) 推荐(5) 编辑
摘要:Until recently, when I write ajax call, always write like below:$.ajax({ type: "post", datatype: "json", url: "someurl", success: function (data) { //some logic }});and repeat everywhere... Until some day: ... 阅读全文
posted @ 2014-01-17 13:43 McKay 阅读(620) 评论(0) 推荐(0) 编辑
摘要:A2D Framework增加了EF支持,加上原先支持ADO.NET:支持EF方式支持ADO.NET方式这次来讲如何让Entity Framework变成nb的读写分离1. 先设计EF模型, 可以图形方式设计,也可以数据库优先方式设计,总之设计完后,再转换成Code方式使用(用)2. 在DbContext类中,删除EF自动添加的报错代码,如下:protected override void OnModelCreating(DbModelBuilder modelBuilder){ throw new UnintentionalCodeFirstException();//... 阅读全文
posted @ 2013-12-06 15:45 McKay 阅读(4010) 评论(2) 推荐(2) 编辑
摘要:A2D中一项功能是关于Cache的,能够将判断、获取、删除cache的代码缩减到最少量,如下是Order业务逻辑的demo示范:interface IOrder{ [Cachable("Order.GetMessage", "Default", ExpireType = CacheExpireType.Absolutely, Increment = 5)] string GetMessage(); [CacheEvict("Order.GetMessage", "Default")] void UpdateMess 阅读全文
posted @ 2013-12-05 00:44 McKay 阅读(2317) 评论(2) 推荐(2) 编辑
摘要:有时在Command和DTO之间层次比较多,写了个验证Command的函数,能实现递归验证.比如下面这些有层级关系的class定义,能通过一句代码来进行验证:class A { [Required] public B B { get; set; } } class B { [Range(10, 20)] public int C { get; set; } [Range(typeof(Guid), "00000000-0000-0000-0000-000000000001", "00000000-00... 阅读全文
posted @ 2013-10-08 17:48 McKay 阅读(1347) 评论(0) 推荐(4) 编辑
摘要:目前只做了基础的功能,比如:各个模块单独的AppDomain容器Activator激活导出的服务检查不过,虽说这样,但目前的这个版本已经能实现模块分离、互相依赖调用等功能了,对模块划分已经有很好的作用了。先来说下基本结构:目前这个框架对UI的模块化尚不支持,只支持单机下的模块加载(以后会改进)。特点:Runtime、Module1、Module2、Module3都是在各自的AppDomain下运行的,不会互相干扰由于采用了隔离AppDomain的方式加载Module,所以能实现轻松卸载AppDomain、某dll、dll版本切换之类的任务,对后续扩展提供了方便来看看模块的编写OrderModu 阅读全文
posted @ 2013-09-10 13:07 McKay 阅读(2995) 评论(5) 推荐(4) 编辑
摘要:基本验证与业务验证,基本验证就是始终保持不变的验证规则,可以通过如下硬编码实现:public class Order { [Required] [Range(typeof(decimal), "1", "10000")] public decimal Price { get; set; } [Required] [StringLength(30)] public string Customer { get; set; } [Required(AllowEmptyStrings=true)] ... 阅读全文
posted @ 2013-09-08 17:35 McKay 阅读(2332) 评论(3) 推荐(2) 编辑
摘要:写了个简单的规则引擎,普通情况够用了:比如2家公司有各自的利率计算规则,如下:在C#方面,没有写在C#的业务逻辑代码中,而是移到了外部规则文件中,如(ACompanyRatePolicy.r):rule "Level 1" when alreadyCostPrice >= 0 alreadyCostPrice = 100 alreadyCostPrice = 300 then rate = 0.5end不同的公司调用不同的Policy定义文件来执行逻辑:核心调用代码:public class CustomerRateServi... 阅读全文
posted @ 2013-09-06 20:19 McKay 阅读(5648) 评论(9) 推荐(0) 编辑
摘要:先上一张本文所描述的适用场景图分布式场景,共3台server:前端ServerOrder App ServerWarehouse App Server功能:前端Server可以不停的发送Command到CommandBus,然后由CommandBus分配不同的Command到各自的app server去处理。前端Server可以只发送Command而不必等待Response前端Server可以同步等待Response返回MSMQ消息超过3.5M会自动转为网络共享方式传输消息对于同一Command的处理,可以通过增加App Server的方式来提高并发处理速度(比如:可以开2个app serve 阅读全文
posted @ 2013-09-05 00:38 McKay 阅读(3056) 评论(2) 推荐(5) 编辑
摘要:Taobao有她自己的分布式session框架,.net阵营也不能落后了,在下做了个基于MongoDB的支持最多26台MongoDB的分布式Session框架。先看看配置文件: SessionDB mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://localhost mongodb://... 阅读全文
posted @ 2013-08-28 23:46 McKay 阅读(9528) 评论(30) 推荐(24) 编辑
摘要:这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下:$.ajax.RESTFulGetCollection("/api/Users", function (data) { alert(data[5].FirstName); });$.ajax.RESTFulGetOne("/api/Users/1", function (data) { alert(data.UserID); });$.ajax.RESTFulDelete("/api/Users/1", func 阅读全文
posted @ 2013-08-12 19:41 McKay 阅读(2475) 评论(1) 推荐(1) 编辑
摘要:其实这个功能比较小,本着自己造轮子的优良传统。。。。就自己造一个好了 虽然小,但是这个功能非常实用。code download 阅读全文
posted @ 2013-08-12 11:25 McKay 阅读(937) 评论(3) 推荐(0) 编辑
摘要:这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了)使用的代码如下,非常方便:输出内容:385bdba36c0e65dee2ab7fc31fbf7ec43566195c29bf18e4722421397cbbf17a665843bd245226bf8947b59d1609837662b149fb025175d9f76dd9710b165c12c0763ca6d0dd549d8b2b9a2fb6f9a3ffaea19281d92eb84972ad3394198bd5ccb0bfb3be071ff32b 要研究mysql,最好的资源莫过于源码了,所以本人打算通过调 阅读全文
posted @ 2013-08-12 01:21 McKay 阅读(3973) 评论(7) 推荐(2) 编辑
摘要:AOP在js中的实现,先看看用法吧: var A2D = $.noConflict();//不要误会,此乃我自己写的A2D框架,非jQuery function fn1(name, age) { console.log("name: " + name); console.log("age: " + age); } function b1() { console.log("b1"); console.log("b1, parameters - 0: " ... 阅读全文
posted @ 2013-08-11 16:38 McKay 阅读(1032) 评论(0) 推荐(1) 编辑
摘要:Node.js是基于javascript的、event驱动的单进程服务器(也能实现cluster模式,只要一个fork()语句,类似于C语言的进程创建)。所以大胆估计:Node.js会把很多大网站吞并,java, .net都会甘拜下风。为什么呢?前端html5, css, javascript(coffeescript也是基于js的),backbone, jquery,requirejs, seajs,都是js,并且已经出现了package的实际标准大网站、高标准网站都是要求写很多js的,如自己的js框架、js组件、js的动态配置以及生成UI等,因此这种类型的网站、系统,js的地位极其高后端这 阅读全文
posted @ 2013-08-05 13:08 McKay 阅读(2231) 评论(14) 推荐(2) 编辑