摘要: 一. 前言 本节继续探讨一种新的框架搭建模式,框架的结构划分和上一节是相同的,本节IOC框架换成了Unity,并且采用构造函数注入的方式,另外服务层的封装模式也发生了变化,下面将详细的进行探讨。 (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:EF 6.2 (CodeFrist 阅读全文
posted @ 2018-11-20 08:34 Yaopengfei 阅读(1479) 评论(3) 推荐(0)
摘要: 一. 前言 从本节开始,将陆续的介绍几种框架搭建组合形式,分析每种搭建形式的优势和弊端,剖析搭建过程中涉及到的一些思想和技巧。 (一). 技术选型 1. DotNet框架:4.6 2. 数据库访问:EF 6.2 (CodeFrist模式) 3. IOC框架:AutoFac 4.8.1 和 AutoF 阅读全文
posted @ 2018-11-16 09:43 Yaopengfei 阅读(1230) 评论(10) 推荐(0)
摘要: 一. 基本概念 1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系。 (2). 显式通过添加(holdlock)来显式添加共享锁(比如给select语句显式添加共享锁),当在事务里的时候,需要事务结束,该共享锁才能释 阅读全文
posted @ 2018-10-09 19:21 Yaopengfei 阅读(1933) 评论(5) 推荐(1)
摘要: 一. 前言 抛砖引玉: 提到项目性能优化,大部分人第一时间就会想到缓存,针对“读多写少”的数据,可以放到缓存里,设置个过期时间,这样就不用每次都去数据库中查询了, 减轻了数据库的压力,比如:商城项目的物品分类目录,不会经常变化,就可以放到缓存里。 详细分析:缓存的引入减轻了数据库的压力,但还是要访问 阅读全文
posted @ 2018-09-28 13:15 Yaopengfei 阅读(1196) 评论(0) 推荐(1)
摘要: 一. 前言 沉寂了约一个月的时间,今天用一篇简单的文章重新回归博客,主要来探讨一下Fluent Api模式在实际项目中的使用流程。 1. Fluent API属于EF CodeFirst模式的一种,EF还有一种模式是DataAnnotations,两种模式各有千秋吧,前面的EF系列已经详细介绍过他们 阅读全文
posted @ 2018-09-25 13:35 Yaopengfei 阅读(1642) 评论(0) 推荐(4)
摘要: 一. 简介 (一). 在处理并发的这个问题上,锁大致分为两类:悲观锁和乐观锁。 1. 悲观锁:悲观的认为每次去拿数据的时候都会被别人修改,所以每次在拿数据的时候都会“上锁”,操作完成之后再“解锁”。 在数据加锁期间,其他人(其他线程)如果来拿数据就会等待,直到去掉锁。数据库层次的悲观锁有“表锁”、“ 阅读全文
posted @ 2018-09-08 20:39 Yaopengfei 阅读(794) 评论(2) 推荐(2)
摘要: 一. 基本介绍 1. 背景:Asp.Net默认的Session机制是进程内,存储在服务器端内存中,有这么几个缺点: ①:既然存在内存中,空间有限,不能存储大数据量信息,数据量多的话Session会被挤爆。 ②:IIS只要一重启,Session就会丢失,哪怕就是改一下配置文件,IIS也会重启,此时如果 阅读全文
posted @ 2018-09-07 07:37 Yaopengfei 阅读(984) 评论(0) 推荐(2)
摘要: 一. 背景 在MVC框架中,我们可能经常会用到 return Json(),而Json方法内部又是一个JsonResult类,那么JsonResult内部又是什么原理呢?在MVC框架中,各种xxxResult便捷了我们的开发,但这些都不是本节的重点,在这里我们只需要知道JsonResult内部的原理 阅读全文
posted @ 2018-08-28 07:36 Yaopengfei 阅读(4912) 评论(36) 推荐(24)
摘要: 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容易骂架,所以在本节乃至该系列我仅仅是总结了一下自己日常中的一些用法,谈一下自己浅陋的见解,谈不上最佳 阅读全文
posted @ 2018-08-21 07:39 Yaopengfei 阅读(8162) 评论(31) 推荐(28)
摘要: 一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架,它的功能很强大,可以将日志分为不同的等级,以不同的格式输出到不同的存储介质中,比如:数据库、txt文件、内存缓冲区、邮件、控制台、ANSI终端、远程接收端等等,我们这里主要介绍最常用的两种:tx 阅读全文
posted @ 2018-08-10 07:33 Yaopengfei 阅读(6430) 评论(39) 推荐(43)
摘要: 一. SignalR中DI思想的应用 DI,即依赖注入,它是一种不负责创建其自己的依赖项对象的一种模式,通常用来降低代码之间的耦合性,广泛应用于架构设计,是必不可少的一种思想。 下面结合一个需求来说一说SignalR中依赖注入思想的应用。 需求:比如在前面章节的聊天室案例中,想把发送的每条消息都记录 阅读全文
posted @ 2018-07-24 07:42 Yaopengfei 阅读(5380) 评论(10) 推荐(13)
摘要: 一. 简单说几句 最早使用SignalR的时候大约是两年前了,记得当时是一个OA中消息的实时提醒,轮询的方式有点耗资源,WebSocket写起来又比较麻烦,最终选择了SignalR,当时是什么版本已经记不清了,反正现在最新的是2.3.0(这里指 .Net FrameWork下,而非Core下),这期 阅读全文
posted @ 2018-07-22 20:08 Yaopengfei 阅读(6445) 评论(1) 推荐(1)
摘要: 一. 说在前面的话 本节主要在前面章节的基础上补充了几个简单的知识点,比如:第三方调用通过 GlobalHost.ConnectionManager.GetHubContext<MySpecHub1>();来获取Hub对象,那么能不能封装一下不必每次都这么获取呢?再比如SignalR传输是否有大小限 阅读全文
posted @ 2018-07-18 11:30 Yaopengfei 阅读(4358) 评论(6) 推荐(12)
摘要: 一. 整体介绍 本节:开始介绍SignalR另外一种通讯模型Hub(中心模型,或者叫集线器模型),它是一种RPC模式,允许客户端和服务器端各自自定义方法并且相互调用,对开发者来说相当友好。 该节包括的内容有: ①:从零搭建 ②:Hub模型和URL匹配,默认模式和指定路径 ③:服务器端代码介绍 ④:客 阅读全文
posted @ 2018-07-14 08:27 Yaopengfei 阅读(6291) 评论(31) 推荐(15)
摘要: 一. 承上声明 在上一个章节里,啰里啰嗦写了一堆关于介绍SignalR的“废话”,从这一篇开始往后正式撸代码,这期间不少人(包括 张善友大哥)建议我直接用.Net Core下的SignalR,关于此简单说一下,虽然我们要跟上时代步伐,但目前绝多数.Net项目都是基于 .Net FrameWork下的 阅读全文
posted @ 2018-07-10 08:01 Yaopengfei 阅读(6220) 评论(16) 推荐(14)
摘要: 一. 声明 该节主要介绍SignalR的一些理论知识,代码量很小,在后续章节编写中,会不断回来更新该节,完善该节的介绍;待该系列结束时,该节会和目录章节合并。 下面的理论介绍相对枯燥,但对于后面的理解有一定意义,不感兴趣的朋友可以右上角离开了,从下一节开始,正式开始撸代码。 原计划三天更新一篇,结果 阅读全文
posted @ 2018-07-08 10:16 Yaopengfei 阅读(7095) 评论(19) 推荐(19)
摘要: 一. 说在前面的话 该篇文章为实时通讯系列的第一节,基于WebSocket编写了一个简易版聊天样例,主要作用是为引出后面SignalR系列的用法及其强大方便之处,通过这个样例与后续的SignalR对比,可以体会到用原生的WebSocket编程的不灵活以及繁琐之处。(PS:下面那个案例 编写+调试 用 阅读全文
posted @ 2018-07-04 18:02 Yaopengfei 阅读(10299) 评论(19) 推荐(13)
摘要: 一. 同步VS异步 1. 同步 VS 异步 VS 多线程 同步方法:调用时需要等待返回结果,才可以继续往下执行业务 异步方法:调用时无须等待返回结果,可以继续往下执行业务 开启新线程:在主线程之外开启一个新的线程去执行业务 同步方法和异步方法的本质区别: 调用时是否需要等待返回结果才能继续执行业务 阅读全文
posted @ 2018-07-02 07:53 Yaopengfei 阅读(31971) 评论(49) 推荐(38)
摘要: 一. 各类概念和指令介绍 1. NVM (1). 全称:Node Version Manager,是一款针对Nodejs的版本管理工具,由于Node的版本很多,很多时候我要需要依赖多个版本,并且要求可以自动切换,这个时候采用NVM来管理Node再合适不过了。 (2). 下载地址:https://gi 阅读全文
posted @ 2018-06-29 07:41 Yaopengfei 阅读(2041) 评论(4) 推荐(7)
摘要: 一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并不对数据进行增、删、改操作,查询数据的时候可以取消状态追踪。 ②:用什么查什么,比如一张表有100多 阅读全文
posted @ 2018-06-26 07:38 Yaopengfei 阅读(11101) 评论(26) 推荐(15)
摘要: 一. NuGet 1. 获取当前项目已经安装的类库:Get-Package 2. 安装指定版本:install-package <程序包名> -version <版本号> 3. 安装最新版本:install-package <程序名> 4. 正常卸载:uninstall-package <程序包名> 阅读全文
posted @ 2018-06-25 10:29 Yaopengfei 阅读(336) 评论(1) 推荐(0)
摘要: 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用"、"每隔2分钟轮询查数据库看某业务是否被审核通过,并提示用户" 等等。 以上需求在开发中 阅读全文
posted @ 2018-06-23 07:46 Yaopengfei 阅读(10815) 评论(26) 推荐(33)
摘要: 一. 静态和非静态 1. 概念介绍 ① 静态类(被static修饰) vs 普通类(没有被static修饰) ② 静态成员:被static修饰的成员,比如:静态方法、静态字段等 ③ 普通成员(实例成员):不被static修饰的成员,比如:普通方法、普通字段 2. 运行机制 ① 静态成员在程序运行的时 阅读全文
posted @ 2018-06-22 11:39 Yaopengfei 阅读(1772) 评论(3) 推荐(6)
摘要: 一. 背景 在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多线程操作一条记录存在的并发问题,后面随着处理的系统业务越来越复杂,多线程再也回避不了了,也就借此机会深入研究了一下.Net中 阅读全文
posted @ 2018-06-21 07:35 Yaopengfei 阅读(9138) 评论(24) 推荐(28)
摘要: 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑定,很快就可以搭建出来一个Web项目,其开发速度远胜Java、PHP,当年Web项目并不很重视体验, 阅读全文
posted @ 2018-06-20 07:38 Yaopengfei 阅读(11553) 评论(11) 推荐(27)
摘要: 一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是【SQL语句+ADO.NET】,那时候,什么存储过程、什么事务 统统不理解,生硬的将SQL语句传入SQLHelper类中,后来知道还要注意SQL注入,引入参数化的方式,现在回想一下,那个阶段简直Low到 阅读全文
posted @ 2018-06-19 07:56 Yaopengfei 阅读(11310) 评论(18) 推荐(22)
摘要: 一. 回顾历史 回顾个人发展历程,自2012年初次接触开发至今(2018年)已经有六个年头,这期间陆陆续续学习并掌握了不少技术,C#语言、ORM框架、多线程技术、设计模式、前端技术、MVC、MVVM框架思想等等,每种技术随着多次使用,随着不断的反思,逐渐经历 “了解→理解→掌握→精通 ”这么一个过程 阅读全文
posted @ 2018-06-15 11:41 Yaopengfei 阅读(10957) 评论(25) 推荐(34)
摘要: 111 阅读全文
posted @ 2018-06-11 09:32 Yaopengfei 阅读(216) 评论(0) 推荐(0)
摘要: 一. C# 6.0 新语法 1. 自动属性初始化可以赋值 1 /// <summary> 2 /// 自动属性初始化 3 /// </summary> 4 public class UserInfor 5 { 6 public string userId { get; set; } = "12345 阅读全文
posted @ 2018-05-19 22:03 Yaopengfei 阅读(1607) 评论(1) 推荐(4)
摘要: 一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的。数组的声明有两种形式:直接定义长度,然后赋值;直接赋值。 缺点:插入数据慢。 优点:性能高,数据再多性能也没有影响 特别注意:Array不是线程安全,在多线程中需要配合锁机 阅读全文
posted @ 2018-05-08 11:36 Yaopengfei 阅读(3380) 评论(2) 推荐(1)