摘要:
前言 我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的。 所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始。 关于消息队列 其实消息队列没有那么神秘,我们这样想一下,用户访问网站,最终是要将数据以HTTP的协议的方式,通过网络传输到主 阅读全文
摘要:
前言 在C#调用OpenCV其实非常简单,因为C#中有很多OPenCV的开源类库。 本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作。 准备工作 首先,我们先创建一个WPF项目。 然后,在Nuget上搜索OpenCVSharp,如下 阅读全文
摘要:
前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库。 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的。 做不了人工智能的不是C#这种语言,而是你,我这种普通的程序员。 做人工智能需要一定的学历背景,一定的数学基础和公司专项的资源供给;而 阅读全文
摘要:
前言 本文主要讲述,在WPF中,借助Vlc.DotNet调用VLC类库,实现视频播功能,下面我们先来做开发前的准备工作。 准备工作 首先,我们创建一个项目WpfVLC,然后,进入Neget搜索Vlc.DotNet,得到如下界面: 我们选择Vlc.DotNet.Wpf,点击安装(这里我已经安装了,所以 阅读全文
摘要:
前言 每次开发滑块控件的样式都要花很久去读样式代码,感觉有点记不牢,所以特此备忘。 自定义滑块样式 首先创建项目,添加Slider控件。 然后获取Slider的Window样式,如下图操作。 然后弹出界面如下.我们点击确定。 点击确定后,我们的页面的Resources中,增加了一系列样式代码,而滑块 阅读全文
摘要:
前言 我在学习WPF的早期,对依赖属性理解一直都非常的不到位,其恶果就是,我每次在写依赖属性的时候,需要翻过去的代码来复制黏贴。 相信很多朋友有着和我相同的经历,所以这篇文章希望能帮助到那些刚刚开始学依赖属性的朋友。 那些[讨厌]的依赖属性的讲解文章 初学者肯定会面临一件事,就是百度,谷歌,或者MS 阅读全文
摘要:
SQLite简易版ORM 首先打开项目,使用nuget搜索sqlite-net,如下图: 下载完成后,我们会多出两个文件,SQLite.cs和SQLiteAsync.cs。 我们新建一个文件夹SQLiteResources,把这俩文件放进去。 然后我们创建两个表实体,如下: 接下来我们创建一个SQL 阅读全文
摘要:
前言 打包桌面应用程序实在是一个不常使用的东西,偶尔使用起来经常会忘东忘西的耽误时间,因此,这篇文章多以图片记录过程,也是用于备忘。 下载打包工具 C#打包桌面应用程序有很多种方法,这里介绍一种使用Microsoft Visual Studio Installer Projects工具打包的方法。 阅读全文
摘要:
前言 在职场中,确立自身的技术水平很重要,因为,如果你被标记成了技术菜鸟,那么你的工作一旦做快了,大家就会一致的认为这个任务比较简单;如果你未如期完成,则会被各种明嘲暗讽,你不但无法获得合理的表扬,还会无端被迫接受攻击。 但是,如果你被标记成了技术高手,那么你就算任务延期也会被理解,因为,他们会认为 阅读全文
摘要:
对于骂街的C++开发,我在这篇文章里统一回复了《我对C++开发人员有偏见》,请移步。 前言 这是一篇C#开发重新学习C++的体验文章。 作为一个C#开发为什么要重新学习C++呢?因为在C#在很多业务场景需要调用一些C++编写的COM组件,如果不了解C++,那么,很容易。。。注定是要被C++同事忽悠的 阅读全文
摘要:
前言 作为一个Windows系统下的开发者,我对于Core的使用机会几乎为0,但是考虑到微软的战略规划,我觉得,Core还是有先了解起来的必要。 因为,目前微软已经搞出了两个框架了,一个是Net标准(.NetFramework),一个是Net Core。 而新特性的更新几乎都是在Net Core这个 阅读全文
摘要:
前言 程序员的进步是需要环境的,良好的团队环境,良好的开发环境,会让人进步的更加快速。 所以,我认为,如果一个程序员,在2019年还在用Visual Studio 2005开发,那么,他,大概率,不会想了解Linq是个什么东西,因为他根本用不到。 就如同我,一直在纯Windows环境下开发,所以就对 阅读全文
摘要:
前言 我们都知道WebApi是依赖于Asp.Net MVC的HttpRouteCollection进行路由 。 但WebApi和MVC之间是没有依赖关系的, WebApi的基类ApiController继承于IHttpController,而MVC的基类Controller 继承于IControll 阅读全文
摘要:
前言 我们学习任何一个新框架时,肯定都需要学习它的子页面用法,因为子页面是封装公共内容最好的容器。 在Xamarin里子页面为Fragment,翻译过来是片段的意思。 Fragment 下面我们来学习Fragment的用法。 首先创建一个类MenuFragment继承Fragment;然后重写他的O 阅读全文
摘要:
前言 很多人觉得Xamarin的开源少,没法用来开发项目。 但,实际上Xamarin已经有很多开源代码了;只要不是特别特殊的项目,基本上是都可以满足开发。 下面我们来看一下Xamarin中利用开源代码ZXing.Net.Mobile进行扫码。 引用ZXing.Net.Mobile 在Xamarin中 阅读全文
摘要:
前言 部署,通常的情况下,它其实也是项目开发的一个难点。 为什么这么说呢?因为,它不是代码开发,所以很多开发者本能的拒绝学习它。 并且一个项目配置好一次以后,部署的步骤和部署的人通常很固定,所以大部分开发者也没机会去学习它。 就算学会了部署的开发者,如果长期不使用,也是很容易忘记部署的方法的。 所以 阅读全文
摘要:
相信我,这不是一篇吐槽文章。。。。 基础控件 Android的控件和控件样式非常特别,它是一种内联特别高的设计模式,换句话说,它是非常烂的设计。。。。 但在这种特别的关系里还是有一定的规律的,下面我们一起来看看控件的使用方式。 首先我们定义一个ImageButton,如下: 如上代码所示,我们定义了 阅读全文
摘要:
创建项目 使用Xamarin开发安卓项目,首先需要安装VS2017以上版本。因为VS2017以上的版本,可以直接创建Xamarin项目。 另外用Xamarin开发安卓项目,还需要使用Intel的CPU,并且得是双核以上的CPU,因为调试时,需要使用电脑的虚拟化,奔腾4之类的CPU是不支持虚拟化的。 阅读全文
摘要:
死锁杂谈 当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行;所以,即时去捕捉数据库死锁,是挺不容易的。 如果,数据库死锁比较长时间,那么死锁是可以被捕捉的。 可以用SqlServer活动监视器来查看,哪些进程锁了数据库。 首先打开SqlServer活动监视器,然后可以看到 阅读全文
摘要:
WPF自定义控件创建 本文简单的介绍一下WPF自定义控件的开发。 首先,我们打开VisualStudio创建一个WPF自定义控件库,如下图: 然后,我们可以看到创建的解决方案如下: 在解决方案中,我们看到了一个Themes文件夹和一个CS文件。 其中CS文件,就是我们需要编写的自定义控件,里面的类继 阅读全文
摘要:
技术文档编写首先寻找资料,阅读资料可以和编写文档同时进行,即编写段落一时查询段落一的相关资料,当编写到后面的段落时,发现和前面的段落有冲突,在回头整改,整个过程类似于ABSD和螺旋开发模式。 第一部分技术文档的开头无外乎背景、目标、范围、参考资料等等,这些是纯商务描述,有成型的资料最好,不然就只能在 阅读全文
摘要:
前言 领域驱动设计,其实已经是一个很古老的概念了,但它的复杂度依旧让学习的人头疼不已。 互联网关于领域驱动的文章有很多,每一篇写的都很好,理解领域驱动设计的人都看的懂。 不过,这些文章对于那些初学者而言,还是如同天书一样。 买本驱动领域的书来看?别逗了,这可不是C#语法入门,哪里有书能写明白的。 想 阅读全文
摘要:
前言 AOP,大家都是听过的,它是一种面向切面的设计模式。 不过AOP虽然是被称为设计模式,但我们应该很少能看到AOP设计的框架。为什么呢? 因为,AOP单独设计的框架几乎是无法使用的。普遍的情况是,AOP要是和其他设计模式结合在一起使用。 所以,AOP虽然是设计模式,但我认为它更接近一种设计元素, 阅读全文
摘要:
前言 这篇文章是WPF框架系列的最后一篇,在这里我想阐述一下我对框架设计的理解。 我对框架设计的理解是这样的: 框架设计不应该局限于任何一种设计模式,我们在设计框架时,应该将设计模式揉碎,再重组;这样设计出来的框架才具有一战之力。 框架设计应该根据项目团队成员水平量身定制。 我上一篇文章《我们都知道 阅读全文
摘要:
要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio。 然后,我们打开Blend for Visual Studio,创建一个WPF项目。 然后,我们向页面拖动一个Button,页面如下: 接下来,我们右键Button控件,选择编辑模板,在选择编辑副本,页面如下: 阅读全文
摘要:
前言 这个框架写到这里,应该有很多同学发现,框架很多地方的细节,其实是违背了MVVM的设计逻辑的。 没错,它的确是违背了。 但为什么明知道违背设计逻辑,还要这样编写框架呢? 那是因为,我们编写的是框架,是使用MVVM的概念编写框架,而并不是要完美的实现MVVM设计。 两者有什么区别呢?区别就是前者是 阅读全文
摘要:
这世上,没人能一次性写出完美无缺的框架;因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美。 所以,框架是个反复修改的东西,最终形成的东西。 如果你学了一点技术,觉得自己可以写出框架了,觉得自己有架构师的能力,然而自己总是怀才不遇——那一定是你的错觉。 因为,你框架没有经过项目淬炼;而淬炼过 阅读全文
摘要:
MVVM的特点之一是实现数据同步,即,前台页面修改了数据,后台的数据会同步更新。 上一篇我们已经一起编写了框架的基础结构,并且实现了ViewModel反向控制Xaml窗体。 那么现在就要开始实现数据同步了。 DataContext—数据上下文 在实现数据同步前,我们要了解一个知识点——DataCon 阅读全文
摘要:
前言 我想,有一部分程序员应该是在二三线城市的,虽然不知道占比,但想来应该不在少数。 我是这部分人群中的一份子。 我们这群人,面对的客户,大多是国内中小企业,或者政府的小部门。这类客户的特点是,资金有限,人力有限。 什么意思呢?就是你如果敢给他安一台Linux服务器,客户的信息员和测试员会把你堵在墙 阅读全文
摘要:
前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的。因此,不管多么高大上的目标,实质上都是业务。 所以,我认为不要把写代码上升到科学的高度。上升到艺术就可以了,因为艺术本身也没有高度。。。。 软件设计存在过度设计,语法和框架的理解,也存在过度理解。比如,反编 阅读全文
摘要:
在C#中消息有两个指向,一个指向Message,一个指向INotify。这里主要讲INotify。 INotify也有人称之为[通知],不管叫消息还是通知,都是一个意思,就是传递信息。 消息的定义 INotify消息其实是一个接口,接口名叫INotifyPropertyChanged。接口定义如下: 阅读全文
摘要:
事件是C#的基础之一,学好事件对于了解.NET框架大有好处。 事件最常见的比喻就是订阅,即,如果你订阅了我的博客,那么,当我发布新博客的时候,你就会得到通知。 而这个过程就是事件,或者说是事件运行的轨迹。 事件是发散,以我的博客为核心,向所有订阅者发送消息。我们把这种发散称之为[多播]。 最常见的事 阅读全文
摘要:
本篇文章主要介绍SqlServer使用时的注意事项。 想成为一个高级程序员,数据库的使用是必须要会的。而数据库的使用纯熟程度,也侧面反映了一个开发的水平。 下面介绍SqlServer在使用和设计的过程中需要注意的事项。 SqlServer注意事项 Sql事务启动语句 开始事务:BEGIN TRANS 阅读全文
摘要:
本篇文章主要介绍委托的应用。
委托是大家最常见的语法了,但会用与精通之间的差距是巨大的。
一个程序员如果不能精通委托,那么,他永远无法成为高级程序员。
所以,让我们把委托刻到血液里吧。
这样,你才能称为Developer。 阅读全文
摘要:
本篇文章主要介绍泛型的应用。 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性、类型安全性和效率。 泛型的定义 下面定义了一个普通类和一个泛型类,我们可以明确看到泛型类和普通类最大的区别就是多了一个<T>。 所以,这个<T>就标记了,这个类是泛型类。其中 阅读全文
摘要:
C#—Nhibernate探索 本篇文章,让我们一起来探索Nhibernate。 首先我们去搜索Nhibernate下载地址,如下链接所示。 该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。 https://sourceforge.net/projects/nh 阅读全文
摘要:
C#5.0推出了新语法,await与async,但相信大家还是很少使用它们。关于await与async有很多文章讲解,但有没有这样一种感觉,你看完后,总感觉这东西很不错,但用的时候,总是想不起来,或者不知道该怎么用。 为什么呢?我觉得大家的await与async的打开方式不正确。 正确的打开方式 首 阅读全文
摘要:
什么是SA? SA即Systems Architecture,是系统体系结构。 系统体系结构是定义系统的结构、行为和系统视图的概念模型。架构师将其系统的形式化描述或表示出来,以支持结构和行为的推理的方式组织。 谈起SA,我第一印象总觉得他是一个概念,一个混淆的概念,因为他被提出时就是模糊的。然而随时 阅读全文
摘要:
CancellationToken的多种应用 这是线程安全的最后一篇了,主要介绍CancellationToken的多种应用。 1,ThreadPool直接启动线程,传递CancellationToken。 2,Task启动线程,传递CancellationToken。Task传递方式分为两种,一种 阅读全文
摘要:
元组Tuple 我们现在使用的C#语法已经可以满足日常的开发需求,但C#语法还在进行版本的更新,在创造更多更优秀的语义来让我们使用。这里介绍一下C#5.0里的提供的语法——元组。 在C#中定义Tuple对象,转到定义查看,我们会看到如下代码 即该语法在.Net Framework4框架中已经可以支持 阅读全文