状态模式(StatePattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统的开发中:有限状态机(FiniteStateMachine,FSM),状态机有三个组成部分:状态(State)、事件(Event)和动作(Action)。其中事件也叫作转移条件(TransitionCondition),事件主要用于触发状态的转移及动作的执行,动作不是必须的,也可能只转移状态,不执行任何动作。一、状态模式的介绍状态模式又名状态对象(ObjectsforStates),它是一种对象行为型模式。它的解决思想是当控制一个
状态模式(StatePattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统的开发中:有限状态机(FiniteStateMachine,FSM),状态机有三个组成部分:状态(State)、事件(Event)和动作(Action)。其中事件也叫作转移条件(TransitionCondition),事件主要用于触发状态的转移及动作的执行,动作不是必须的,也可能只转移状态,不执行任何动作。一、状态模式的介绍状态模式又名状态对象(ObjectsforStates),它是一种对象行为型模式。它的解决思想是当控制一个
gRPC是Google发起的一个开源RPC框架,使用HTTP/2传输协议,使用ProtocolBuffers编码协议,相比RESTful框架的程序性能提高不少,而且当前流行的编程语言基本都已经支持。Golang开发gRPC应用程序的套路也已经很清晰,这篇文章就来做一个简单的介绍,算是入门。1、安装protoc这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码。下载地址:https://github.com/protocolbuffers/protobuf/releases一般下载最新版本就行,注意要符合自己当前的操作系统。解压后里边有个protoc.exe,拷贝到
gRPC是Google发起的一个开源RPC框架,使用HTTP/2传输协议,使用ProtocolBuffers编码协议,相比RESTful框架的程序性能提高不少,而且当前流行的编程语言基本都已经支持。Golang开发gRPC应用程序的套路也已经很清晰,这篇文章就来做一个简单的介绍,算是入门。1、安装protoc这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码。下载地址:https://github.com/protocolbuffers/protobuf/releases一般下载最新版本就行,注意要符合自己当前的操作系统。解压后里边有个protoc.exe,拷贝到
学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习ASP.NETCoreBlazor编程系列三——实体学习ASP.NETCoreBlazor编程系列五——列表页面学习ASP.NETCoreBlazor编程系列七——新增图书学习ASP.NETCoreBlazor编程系列八——数据校验学习ASP.NETCoreBlazor编程系列十三——路由(完)学习ASP.NETCoreBlazor编程系列十五——查询学习ASP.NETCoreBlazor编程系列
学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习ASP.NETCoreBlazor编程系列三——实体学习ASP.NETCoreBlazor编程系列五——列表页面学习ASP.NETCoreBlazor编程系列七——新增图书学习ASP.NETCoreBlazor编程系列八——数据校验学习ASP.NETCoreBlazor编程系列十三——路由(完)学习ASP.NETCoreBlazor编程系列十五——查询学习ASP.NETCoreBlazor编程系列
1.如何保证缓存与数据库的数据一致性?要保持数据强一致性,只能将读请求和写请求串行化,在同一个内存队列里执行。但是串行化会导致系统的吞吐量大幅度降低,多用几倍的机器去支撑线上的请求。2.如果只要数据最终一致性,该怎么做呢?缓存设置过期时间。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新数据的时候,先更新数据库,然后再删除缓存。3.为什么是删除缓存,而不是更新缓存?删除比更新更快捷。比如有些缓存值是由多个数据计算出来的,如果计算比较耗时,在高并发下,更新缓存的方式增加了读缓存不一致的概率。有些缓存是冷数据,删除缓存等于是将更新缓存延迟到了读请求的时刻。4
1.如何保证缓存与数据库的数据一致性?要保持数据强一致性,只能将读请求和写请求串行化,在同一个内存队列里执行。但是串行化会导致系统的吞吐量大幅度降低,多用几倍的机器去支撑线上的请求。2.如果只要数据最终一致性,该怎么做呢?缓存设置过期时间。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新数据的时候,先更新数据库,然后再删除缓存。3.为什么是删除缓存,而不是更新缓存?删除比更新更快捷。比如有些缓存值是由多个数据计算出来的,如果计算比较耗时,在高并发下,更新缓存的方式增加了读缓存不一致的概率。有些缓存是冷数据,删除缓存等于是将更新缓存延迟到了读请求的时刻。4
值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,基本上您能听懂是什么意思,在BO层中所承担的角色也比较明确,唯独这个值对象有点坑爹。遥想当年我在使用C#的时候,里面有一个值类型,与别人讨论的时候经常会把这个东西搞混,就我现在写东西还下意识把“值对象”写成“值类型”呢。《实现领域驱动设计》书中针对值对象给了大概8类特性概括,如下图所示。不过要我说,也就那么有限几点值得注意的。如果从编程的角度来看,所谓的值对象其实也很普通,所以让我们以白话的形式盘盘它。一、特性
值对象这个东西在DDD里算是比较抽象的,好多人学了半天也学不明白。我这种聪明人也费了好大劲,总算苦心人天不负,现在也能用个有模有样了。战术模式中不论是领域服务、对象工厂还是资源库,基本上您能听懂是什么意思,在BO层中所承担的角色也比较明确,唯独这个值对象有点坑爹。遥想当年我在使用C#的时候,里面有一个值类型,与别人讨论的时候经常会把这个东西搞混,就我现在写东西还下意识把“值对象”写成“值类型”呢。《实现领域驱动设计》书中针对值对象给了大概8类特性概括,如下图所示。不过要我说,也就那么有限几点值得注意的。如果从编程的角度来看,所谓的值对象其实也很普通,所以让我们以白话的形式盘盘它。一、特性