Web Analytics
yangyang

码农兼一个普普通通小青年

All Posts


从单元测试来对代码逻辑进行改进

这个例子来源于Pro ASP.NET Core 3这一本书,书中介绍了对ASP.NET Core程序进行单元测试的方法,其中有一例,在对购物车逻辑模块进行功能开发的时候,发现单元测试很“吃力”,后面得到了如何对其进行优化,从而大大简化了单元测试的方法。所以这里记录一下。 购物车的实现     这里只是一个简单的购物车实现,用户在挑选物品放进购物车的时候,将数据临时存放在了Session中(缺点是如果服务器重启,数据会丢失,这里不讨论)。购物车的模型Cart如下: public class Cart { public List<CartLine> Lines { get; set; } = new List<CartLine>(); public virtual void AddItem(Product product, int quantity) { …

UnitTest SRP

周幽王与西周灭亡

​    西周的最后一个国王是周幽王,但西周的灭亡,一般会从倒数第三位的周厉王开始谈起。周厉王和周幽王成了后世昏君、暴君、亡国之君的代名词。骂皇帝,最严重的的指控是比作“桀纣”(jié zhòu),其次就是“幽历之君”,“杀戮无辜曰厉”。     周厉王时期,连年战乱,百姓苦不堪言。同时,周厉王喜欢聚敛,垄断社会财富及资源。为压制国人不满,周厉王派人监控舆论,有妄议天子的人就杀掉。又有贤良的臣子再次劝谏厉王,强调言论自由和广开言路。“防民之口、甚于防川”就是从这里来的(跟“水能载舟,亦可赛艇亦能覆舟”差不多意思)。     但厉王不听,三年之后,爆发叛乱,厉王被迫逃出京城,渡过黄河,到达彘(今山西霍县),十四年后死在哪里。厉王死后,其子姬静即位,是为周宣王,“善闻周达曰宣”。周宣王迁都镐(hào)京,位四十六年,励精图治,政通人和,诸侯来朝。     周宣王死后,局面急转直下。其子姬宫涅( …


解决OneNote无法登录的问题

本人Windows 10系统,使用的是OneNote 2013,感觉在国内使用微软的服务经常会出现无法同步的问题,同步的问题大部分都是因为账户过期或者无法登录,今天我就碰上了。发现OneNote无法同步,提示需要登录。于是到OneNote-账户,注销当前账户,重新登录。     登录的时候就遇到了问题,在登录界面上输入用户名后,点击继续,原本是要跳转到输入密码的页面,但是出现了错误,页面根本无法加载: This site can’t be reachedlogin.live.com’s server IP address could not be found.      网上查找了一番,有的人说是先登录网页版的OneNote,于是打开网页版的OneNote,在输入用户名之后,跳转的页面仍然会出现无法加载,于是使用自带的页面上的网络诊断工具:     点击“Running …

onenote

让站点支持TLS 1.2

本博客源自Moonglade项目,原博主采用的是全套Azure部署模式(包括Azure App Service,Azure SQLServer等等),但是这需要钞能力才能完成。由于贫穷,本人购买的是一台云服务器,网站运行在IIS上,后台数据库使用的免费的SQLServer Express版本。     为了安全原因,将站点升级为了HTTPS,目前这个也很简单,在各大公有云网站都能申请免费期为1年的DV证书,申请次数目前也没有限制,1年到期之后,再次申请即可,当然也可以花钱购买证书,如果使用Azure,上面也有免费的证书,至于如何申请SSL证书,以及如何为站点配置证书以支持HTTPS,这里不展开,网上有很多相关教程。     但是HTTPS站点就一定是安全的吗?我们可以去https://www.ssllabs.com/ssltest/ 这个网站评估一下自身站点,我的站点评估结果是B,提示 …

TLS 1.2 SSL

解决Windows上Docker Desktop中Kubernetes一直处于starting的问题

前面三篇文章已经了解了Docker的基本用法,后面应该是要继续看Docker Swarm的,结果发现这个已经不流行了,流行的是Kubernetes,所以这篇文章开始就开始学习Kubernetes了。 遇到的问题     电脑的操作系统是Windows 10,安装的是最新的Docker Desktop,这个里面本来就有单节点的Kubernetes,所以想着把环境搭建一下,默认情况下,Kubernetes是没有启动的。在设置里可以启动。     目前Kubernetes的最新版本是v1.19.7,在设置里面Kubernetes项目里,可以开启,然而,并不顺利。     勾选“Enable Kubernetes”之后,一直状态一直显示"Starting...",等待很久很久,最后就会失败,左下角第二个图标也是黄色或者红色,表示遇到错误。 解决办法     “出师未捷身先死”,环境启动不起来,于 …

Docker kubernetes

在Docker中运行ASP.NET Core MVC程序:使用docker-compose

在前面一篇文章中,演示了一个ASP.NET Core MVC应用程序,这个程序使用了MySQL,负载均衡,涉及到要创建多个容器,Volume卷以及自定义网络。这种纯手工的方式很容易出错,不仅每一个命令必须输入正确,并且每个步骤还要按照先后顺序来输入,比如再创建MySQL容器的时候,必须事先把其依赖的卷创建好。如果漏了某个步骤,或者某个步骤顺序发送错误,则程序就运行不起来。如果应用程序架构比较简单,这种问题不大,但当应用程序设计模块比较多时,可能会想到自己编写一些脚本来实现自动化,而Docker为我们提供了docker-compose功能,利用这以功能可以实现对复杂应用的管理,包括容器,Volume,自定义网络中。 准备工作     在开始之前,我们将之前创建的容器,网络和Volume都删掉,这些我们在后续都可以通过docker-compose来创建。 docker rm -f $( …

Docker HAProxy Load Balance Docker Compose

在Docker中运行ASP.NET Core MVC程序:Docker卷、自定义网络和负载均衡

在前面一篇中,我们使用了模拟的数据DummyRepository,数据是存储在内存中的,然而在实际应用中,一般数据是存放在数据库中,所以数据库应该也有单独的容器来承载,那数据库文件呢?这里就用到了Volume, 在这一篇我们会接触到Docker里的两个重要概念:Volume 卷和Software-define Network自定义网络。     Volume是卷的意思,我们能够将数据库或者应用程序产生的重要数据,存放在单独的Volume,而不是容器内,这样容器删除或者变更不会对这些数据产生影响。     Software-define Network,软件自定义网络是一种Docker内的网内协议,允许容器内的应用程序能够相互通讯。 了解Volume     应用程序可能会用到两只类型的文件:运行应用程序所需的文件,包括常见的dll,资源文件等等;应用程序所产生的文件,比如由于用户操作,所产 …

Docker HAProxy Load Balance Volume SDN

冯唐易老,李广难封

关于李广,我们今天得到信息最多的是司马迁的《李将军列传》,这篇列传倾注了司马迁浓郁的仰慕、亲近、痛惜之感,这太像在写一个自己熟悉的人了。李广和司马迁差不多是同一时代的人,也在同一个系统里工作过,这里先从郎官说起。 郎官系统     在讲述李广的故事之前,我们先了解一下郎官系统。    郎中令是秦代设立的官职,执掌宫殿两边的门户的防御,它下面还有一大堆属官,比如司马迁担任的郎中,官秩三百石,这是郎官中级别最低的那种。郎官最初的工作是担任君王身边的警卫,他们执戟站立在走廊之下,因此被称为“郎(通廊)内诸官”,从构字上说,“广”是屋檐伸出的部分,“广”下有一个“郎”,相当形象生动。    但皇帝显然愿意让郎官们扮演更重要的角色。一些足智多谋的郎官就成为了皇帝的顾问官,他们为皇帝出谋划策,以及处理一些特别机密、紧要的事情,所以这些郎官不再是武士,文职官员色彩越来越重。而郎中令有可能成为至关重要的实 …


在Docker中运行ASP.NET Core MVC程序:Docker基本用法

Docker是一系列创建和管理容器的工具,它能够将服务器上的应用程序相互隔离起来。这一系列文章是我学习在ASP.NET Core MVC中使用Docker实践的学习笔记,参考《Essential Docker for ASP.NET Core MVC》这本书。 Docker能解决什么问题? Docker能解决ASP.NET Core MVC项目中存在的两个复杂性问题:一致性问题和响应性问题。 一致性问题     大部分的ASP.NET Core MVC应用都由多个组件组成,比如至少需要一个服务器来运行MVC应用,以及一个数据库用来持久化数据。     一些复杂的应用可能还需要其他的一些组件,比如多应用服务器来共享工作量,负载均衡用来在多个服务器之间分发HTTP请求、数据缓存组件用来提供性能。随着组件的增加,额外的服务器可能会被加入进来,这就需要网络将这些组件连接起来,命名服务器用来提供服务 …

ASP.NET Core MVC Docker Visual Studio Code Docker Image Docker Container

C#设计模式之观察者模式

观察者模式,简单来说就是一个组件在状态发生变化的时候,可以通知其它组件。观察者模式用途很广,比如在UI界面中,当绑定的数据对象发送改变,UI会跟着发送改变。观察者模式是一种很常见和必要的模式,C#的设计者通过关键字event来简化对观察者模式的使用。它的基本用法是,首先使用event关键字定义事件,然后注册事件回调方法EventHandler,回调方法通常包含两个参数,一个object类型的sender和一个继承自EventArgs的参数,该参数携带一些触发事件的必要信息。     event事件其实是对委托的包装,就像Action和Func是对lamda表达式的包装一样。对event的包装成为EventHandler,有泛型和非泛型版本,泛型主要是继承自EventArgs的类型。     下面举个例子说明:假设人病了需要去看医生。首先要定义看医生时要提供的信息,在这个例子中只需要告诉医生 …

Design Pattern Observer Pattern Event Stream