
[设计模式]
雪轻鸿
谢谢你,在这世界的角落,找到我,一个即将进入而立之年的中年大叔,常年以 飞鸿踏雪 的花名混迹江湖。在现实生活中,我是一名 伪·全栈攻城狮,因为我觉得,什么都略懂一点,生活会更多彩一些。目前,主要关注.NET、.NET Core、Python、数据分析、微服务、Web 等技术方向。日常行为:读书、写作、电影、烹饪、洞箫等。喜欢看日剧/纪录片/科普、刷B站、刷LeetCode等。
-
原创 .NET Core中对象池(Object Pool)的使用
在此前的博客中,博主参考 eShopOnContainers 实现了一个基于RabbitMQ的事件总线(EventBus)。在这个项目中,它提供了一个持久化连接的类DefaultRabbitMQPersistentConnection,主要解决了RabbitMQ在连接断开后自动重连的问题,可实际上我们都知道,RabbitMQ提供的连接数是有一个上限的,如果频繁地使用短连接的方式,即通过ConnectionFactory的CreateConnection()方法来创建一个连接,从本质上讲,一个Connecti2020-08-25 17:54:54672
0
-
原创 漫谈应用程序重试策略及其实现
最近随项目组对整个项目进行联调,在联调过程中暴露出各种问题,让我不得不开始反思,怎么样更好地去做好一件事情,譬如说在开发过程中如何保证Web服务的稳定性,在敏捷开发中如何降低文档维护的成本,以及如何提高多环境服务部署的效率等等。我为什么会考虑这些问题呢?通常我们都是在约定好接口后并行开发的,因此在全部接口完成以前,所有的服务都是以渐进的形式进行集成的,那么如何保证服务在集成过程中的稳定性呢?尤...2018-04-01 21:35:461149
0
-
原创 使用Unity框架简化应用程序异常处理及日志记录流程
最近公司安排学习项目代码,前后花了一周左右的时间,基本熟悉了项目中的各个模块,感觉项目难度上整体偏中等。这是一个具备完整前端和后端流程的项目,在学习这个项目的过程中,我逐渐发现某些非常有趣的东西,比如在Web API的设计中采用严谨而完善的错误码、使用OAuth和JWT对API资源进行访问控制,在JavaScript中使用修饰器特性来实现日志记录等等,这些东西我会在后续的博客逐步去整理,今天想...2018-03-21 00:05:161849
6
-
原创 基于过滤器实现异常处理的探索
正如你所看到的那样,今天我想和大家聊聊异常处理这个话题。对于异常处理这个话题,我相信大家都有各自的方法论。而我今天想和大家探讨的这种异常处理方案,我将其称之为基于过滤器的异常处理。我不知道这种定义是否准确,我们的项目上在要引入AOP的概念以后,我们对异常处理的关注点就从try-catch转向Interceptor。虽然首席架构极力推荐,使用Unity框架来拦截代码中的各种异常,可从我最初纠结于”re2017-05-28 12:41:402939
0
-
原创 Redis缓存技术学习系列之发布订阅
各位朋友,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com。最近这段时间的天气可谓是变幻莫测,常常是周一到周五像夏天般热烈,而周六和周天像秋天般冷清。你不知道它到底会在何时下雨,即使你可以一直带着伞等雨落下来。但是对于没有伞的我来说,学会努力奔跑以至于不那么狼狈,或许是在这个世界上我唯一可以去做的事情。可是你知道一个人孤独的时候,即使是下雨这种再2017-04-19 00:39:0512204
1
-
原创 一个关于概率的问题的思考
最近需要给公司内部编写一个随机生成人员名单的小工具,在解决这个问题的过程中,我认识到这是一个概率相关的问题,即使在过去我曾经设计过类似转盘抽奖这样的应用程序,可我并不认为我真正搞清楚了这个问题,所以想在这篇文章中说说我对概率问题的相关思考。首先,我们来考虑这个问题的背景,我们需要定期在内部举行英语交流活动,可是大家的英语水差异悬殊,所以如果按照常规的思路来解决这个问题,即认为每个人被选中的概率是相等2016-10-19 00:00:462882
1
-
原创 基于C#中的Trace实现一个简单的日志系统
最近在做的项目进入中期阶段,因为在基本框架结构确定以后,现阶段工作重心开始转变为具体业务逻辑的实现,在这个过程中我认为主要有两点,即保证逻辑代码的正确性和容错性、确定需求文档中隐性需求和逻辑缺陷。为什么我说的这两点都和用户需求这个层面息息相关呢?或许这和我这段时间的感受有些关系吧,我觉得当我们在面对用户提出的需求的时候,一个非常让我们不爽的一个地方是,我们总是需要花费大量的时间来和用户确定某些细节,2016-11-06 13:18:2212972
13
-
原创 浅析WPF中MVVM模式下命令与委托的关系
各位朋友大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com。最近因为项目上的原因开始接触WPF,或许这样一个在现在来讲显得过时的东西,我猜大家不会有兴趣去了解,可是你不会明白对某些保守的项目来讲,安全性比先进性更为重要,所以当你发现银行这类机构还在使用各种“复古”的软件系统的时候,你应该相信这类东西的确有它们存在的意义。与此同时,你会更加深刻地明白2016-09-11 23:56:194782
4
-
原创 [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。在之前的三篇系列文章《Unity3D游戏开发之Lua与游戏的不解之缘》中,博主带领大家一起领略了Lua在游戏开发中强大而迷人的作用,通过UniLua这个开源项目我们将Lua引入了Unity3D的世界,并且在此基础上我们写出了Lua'与Unity3D交互的第一个示例程序。今天呢,我们来说说Unity3D配合AssetBundle和;Lua实现热更新。2014-10-18 23:23:0010137
4
-
原创 设计模式之原型模式
/// /// 目的:学习原型模式 /// 日期:2013年11月20日 /// 作者:秦元培 /// 摘要: /// 原型模式(PrototypePattern):通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。 /// 在C#里面,我们可以很容易的通过Clone()方法实现原型模式。任何类,只要2013-11-20 18:51:272215
1
-
原创 设计模式之简单工厂模式
博客沉寂了一段时间,主要是这段时间在玩古剑2,现在游戏即将通关,我想是时候开始学习新东西了。 今天给大家带来的是设计模式中简单工厂模式。 从设计模式的类型上来说,简单工厂模式是属于创建型模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的2013-11-16 14:12:242424
0
-
原创 设计模式之工厂方法模式
在上一篇文章中,我们学习了第一个设计模式:简单工厂模式。通过这个模式,我们可以生产出不同的产品。在这个模式中,我们知道最终在客户端起作用的,其实是工厂类,即工厂类决定了我们能够生产那些产品。 一旦我们需要增加新的产品种类,就必须去修改工厂类,这样是不利于系统的稳定的。我们在设计中提倡将抽象层作为一个公共父类或者接口,然后将具体层作为抽象层的一个子类,换言之,由具体层来继承抽象层实现特定的功能。那么2013-11-17 01:06:152190
0
-
原创 设计模式之单例模式
好了,介绍了工厂模式,我们再来学习一个新的设计模式:单例模式。单例模式是运用最为广泛的一种设计模式。那么什么是单例模式呢?简单来说,单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。2013-11-17 15:01:522217
0
-
原创 设计模式之抽象工厂模式
继续沿着前一篇文章的思路,我们在工厂方法模式中提到:为了增加新产品同时避免对整个系统产生影响,我们提出了将工厂类抽象化的方法。那么,现在让我们来思考这样一个问题,如果我们继续将产品抽象会怎么样呢?这就是我们今天要学习的抽象工厂模式。 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式包括四种角色,抽象工厂角色、具体工厂角色、抽象产品角色、具体产2013-11-18 23:08:322304
0
-
原创 设计模式之建造者模式
/// /// 目的:学习建造者模型 /// 日期:2013年11月20日 /// 作者:秦元培 /// 摘要: /// 下面描述的是建造者模式,建造者模式共有四种角色,分别是: /// 建造者角色、具体建造者角色、指导者角色、产品角色 /// 建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此2013-11-20 18:47:301981
1