- 博客(30)
- 收藏
- 关注
原创 DDD学习笔记七
3)所在模型即为观察目标,观察目标实现Object接口的3个操作(通知观察者、添加和删除观察者),同时定义一个Observer接口的集合成员。2)运用“面对接口编程思想”,在领域模型内声明接口成员,用接口的处理替代所有的处理分支,接口方法的命名要符合通用语言。6)将转换条件实现在含有状态的模型中(第一个代码例子)或者具体状态类中(第二个代码例子),又或者外部的配置文件中。要综合平衡用户体验和实时性的要求。4)找到事件的消费者,它可能是为了解耦从观察目标拆解出来的新对象,也可能是领域中的其他模型,即观察者。
2024-07-15 08:16:29
819
原创 DDD学习笔记六
处于上游的交易系统可能独立于下游系统,而下游系统的开发可能会受到很大的影响,如果不能形成上下游的有效协同,那么下游系统就必须遵从上游上下文的发布节奏来安排自己的工作。这时,下游团队采用的就是追随者模式,完全借用跟随上游发布的模型或接口,下游团队可能必须牺牲其领域模型的清晰性,必须与上游的模型保持一致,通用语言也会因此发生变化,或者借用上游系统的上下文。1)核心域:最具价值、最专业的领域模型的集合,是系统区别于其他系统的独特价值点,体现的是组织的核心竞争力和独特的业务解决之道,如特有的商业模型或核心算法。
2024-07-02 15:20:00
769
原创 DDD学习笔记五
作为模型仓库,存储库的另一个实用的功能是扮演仓库管理员,给我们提供关于集合的统计信息,比如对象的数量、集合中所有匹配对象的某个数值属性的总和等。此时,存储库提供的方法不再返回一个聚合根,而是一个值对象。聚合是存储在一个表或多个表中并不重要,重要的是当聚合被持久化时,需要在单个事务中提交,以确保在持文化失败时,聚合不会以不一致的状态被存储。聚合内的规则是时刻不能被违反的,但聚合间的规则要弱一些,所以跨越多个聚合的规则不立刻保持一致是可以接受的(容忍时长取决于业务),我们可以应用最终一致性规则来更新其他聚合。
2024-06-30 21:47:34
1094
原创 DDD学习笔记四
规格模式是将一组判断条件封装成一个单独的值对象,名称中一般带有形容词,表达了很强的领域含义,代表客户对于程度的看法,如“大额存单”“过期发票”“优秀成绩”等。算法逻辑涉及领域的核心逻辑,其本身往往是内聚的,将其独立出来是最值得倡导的建模实践,如复杂的候选人排名规则、销售佣金的计算策略、保单的风险评估等。算法逻辑独立出来后,避免了复杂算法对领域模型的干扰,领域中的其他模型就可以专注于表达“做什么”的逻辑,而把“如何做”的复杂细节转移给了算法模型。领域事件是领域专家所关心的发生在领域中的有影响力的事件。
2024-06-30 20:11:00
1036
原创 DDD学习笔记三
为操作独立出一个接口,然后让实现类来实现该接口(取决于你对操作多态性的需要,即是否有不同的操作逻辑需要灵活地替换)领域中的值对象也不需要自己的表,不要为值对象创建单独的表,只需将它们内联到父实体的表中即可。领域服务表示一个无状态的操作,之所以给其单独建模,是因为这类操作不适合放在实体或值对象中。在领域中,一个由身份而不是属性值定义的客观概念就是实体,这个身份可以由一个唯一标识确认。通过所有属性值相同来判断相等的,而不是特定的身份标识符。通过其特性所定义的,它不需要身份,相同特性的值对象是完全等价的。
2024-06-29 10:48:47
399
原创 C++学习笔记---POCO库
Util包提供了创建命令行和服务器应用的框架,包括对命令行参数处理的支持。通过使用Util提供的框架,开发人员可以方便地创建Windows系统的后台服务或者Linux系统的精灵进程(守护进程,即后台服务进程)。Util包还支持不同的配置文件格式,如Windows系统中的注册表、INI格式配置文件、XML格式的配置文件等。POCO中的XML包用来处理XML文件,它既提供了SAX2接口又提供了DOM接口。其中,nosamples参数表示不构建POCO示例,notests表示不构建测试示例,以便节省构建时间。
2024-06-27 17:04:44
490
原创 C++项目实践学习笔记---DLL
如果使用动态加载的DLL,EXE只有在加载该DLL后才依赖DLL库文件,而在卸载DLL后就不再依赖DLL库文件了,这时即使删除该DLL库文件也不影响EXE的正常运行。如果使用静态链接的DLL,在构建EXE项目时需要用到DLL的lib文件,以便链接DLL中的符号,如引出类、引出接口;需要注意的是Linux中的DLL文件一般会有多个软链接(类似Windows中的快捷方式),在使用前需要确认该文件名与磁盘上DLL的实际文件名是否一致,如果不一致将导致加载失败。(1)如果要调用DLL中的接口,首先需要加载DLL。
2024-06-27 14:16:49
739
原创 DDD学习笔记二
在执行条的时间范围内,该实体将完成一系列操作,这些操作都是同步的,意味着一个操作有了返回值才会执行下一个操作,执行条消失意味着该实体的方法执行完毕。一般在没有自动垃圾回收机制的语言中需要考虑销毁对象的操作,如果我们使用的是完全的面向对象语言,如Java、C#,则可以忽略销毁对象的操作。”的关系,代码层面对应的是集合,也可以添加相应的业务逻辑,比如如果集合是排好序的,可以加上{Ordered}特性。被创建的对象与创建它的对象不在同一高度,时序图从上到下体现的是时间顺序,低于被创建者,意味着它是之后被创建的。
2024-06-26 15:40:43
1000
原创 DDD学习笔记一
1:语义一致性(Semantic Coherence)原则:相同的逻辑,代码中只能有一个处理的地方。(DDD)所有的业务逻辑都必须封装在领域模型中,领域模型是调用业务逻辑的唯一入口,保证了“一处逻辑只有一处代码”的原则。3:最简(Minimize)原则:用最简单的机制来满足需求,不要引入不必要的组件、框架等,用极简的方式添加功能,2:开闭(Open-Closed)原则:软件模块对于需求应该是可以扩展的,但对于代码修改是关闭的。高内聚即关系紧密的逻辑整体要组织到一起,每个模块都要有清晰定义的角色,
2024-06-25 21:54:10
301
原创 c++网络通信
(2)传输层:在此层中提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据包协议(UDP)等,TCP和UDP给数据包加入传输数据,并把它传输到下一层中。流式套接字:提供了双向、有序、可靠的数据传输服务,该类型套接字在通信前需要双方建立连接,TCP协议采用的就是流式套接字。数据包套接字:提供双向的数据流,但是它不能保证数据传输的可靠性、有序性和无重复性,UDP协议采用的就是数据包套接字。每一个物理网络都有一个唯一的网络号,根据网络号的不同,可以将IP地址分为5类,即A类、B类、C类、D类和E类。
2024-06-25 11:37:44
989
原创 Promise类型
另外还有一个catch方法,可以捕捉失败的异步操作,这样就没必要每个then都写失败回调了。直接在顶级的Promise写上catch()就行。Promise.try方法。如果认为Promise创建时有可能出现错误。finally:不管异步操作成功与否,都会执行。
2024-06-24 22:09:36
186
原创 SQLServer 索引与数据完整性---学习笔记
EXEC sp_fulltext_table ‘Employee’,‘create’,‘ML_Employ’,‘MR_Emp_ID_FIND’ --表启用全文索引标记。EXEC sp_fulltext_catalog ‘ML_Employ’,‘start_full’ --启动表的全文索引的完全填充。[@keyname =] ‘unique_index_name’:有效的单键列,create动作在qualified_table_name上的唯一的非空索引。
2024-06-24 10:23:49
1448
原创 微服务知识
熔断机制类似于电路中的熔断器,当某个服务出现故障或响应时间过长时,熔断器会“熔断”,阻止后续请求继续访问该服务,从而避免整个系统的崩溃。1)一致性(C):是指分布式系统中的所有数据副本在同一时刻是否一致,也就是说,访问所有数据副本的节点,是否都会返回一样的结果。3)分区容错性(P):这个概念比较抽象,简单来说,假设集群有两个节点对外提供服务,理论上,这两个节点之间是可以互相通信的,例如,如果阈值设置为每分钟10个请求,且所有请求都在时间窗口的最后几秒内到达,那么这些请求仍然会被接受,可能导致系统过载。
2024-06-23 23:08:32
760
原创 缓存层持久化
4)Elasticsearch用来处理用户针对请求日志的查询请求,它将查询关键字段的值和请求ID存放到索引中,跟进查询关键字获得结果ID的列表,再通过结果ID去HBase中获取详细的请求数据。可以把Kafka的存储架构简单理解为,Kafka写数据时通过追加数据到文件末尾来实现顺序写,读取数据时直接从文件中读,这样做的好处是读操作不会阻塞写操作,这也是其吞吐量大的原因。总体来说,对于浏览页面的用户行为,需要把用户请求尽量拦截在CDN、静态资源或负载均衡侧,如果确实做不到,也要拦截在缓存中。
2024-06-23 21:39:59
1222
原创 数据库层持久化
假设需要查询的数据分布在多个数据库的多个表中(比如在order1里面的t_order_1,order2里面的t_order_9中),那么需要将针对这些表的查询结果合并成一个数据集。比如,原来有2000万的数据,设计10个分区,每个分区存200万的数据,那么可以优化查询语句,让它只去查询其中两个分区,即只需要扫描400万的数据。2)用户能接受新旧数据分开查询,比如有些电商网站默认只让查询3个月内的订单,如果要查询3个月前的订单,还需要访问其他的页面。同样,有新数据时,可以增加更多的分区来存储新数据。
2024-06-23 16:33:22
989
原创 C#高级知识
创建了Thread类的对象之后,线程对象已存在并已配置,但并未创建实际的线程,这时,只有在调用Start()方法后,才会创建实际的线程。Abort(object stateInfo)终止线程,在调用此方法的线程上引发ThreadAbortException异常,以开始终止此线程并提供有关线程终止的异常信息的过程.stateInfo对象包含了应用程序特定的信息(如状态),该信息可供正被终止的线程使用。调用Suspend()方法挂起线程时,.NET通常会允许该线程再执行几个指令,以达到线程可以安全挂起的状态。
2024-06-22 17:10:38
1146
原创 C#基础知识
view: details:详细信息显示 LargeIcon:大图标显示,下面由标签,默认方式 list:显示一个小图标,右边带一个标签,各项排列在列中,没有列箭头 smallicon:显示一个小图标,右边带一个箭头 tile:显示为完整大小的图标,右边带项标签和子项信息。Fix3D:固定的三维边框。fill(dataset,srctable):用数据填充dataset,可以多次调用srctable,若主键存在,则传入行会与已有的行合并,若不存在,则追加到dataset中。
2024-06-21 13:37:34
835
原创 C++高级知识
如 vector::iterator it(将it声明为向量容器的迭代器), ++it(迭代器加1,使其指向容器中的下一个元素) ,*it(返回当前迭代器位置上的元素)。-remove(first,last):将指定范围内的指定元素移除,不是真删除,是将该元素用后面额元素覆盖,因此容器长度不变,而未被移除的元素将会向前复制,后面多于的元素将不会移除。find(fist,last,val):在指定的范围内搜索与指定值匹配的第一个元素,若找到返回元素第一次出现的位置,否则返回序列的尾部。
2024-06-19 12:26:58
732
原创 C++核心知识
虚函数表:编译器为每个对象提供了一个虚表指针,这个指针指向了对象所属类的虚表,在程序运行时,根据对象的类型去初始化虚拟指针,从而让虚拟指针正确的指向了所属类的虚表,在调用虚函数的时候才能正确找到正确的函数。public :在公有继承中,基类的公有(public)和保护(protected)成员在派生类中仍然是公有和保护成员,但基类的私有(private)成员在派生类中是不可访问的。构造函数,先调用父类的构造函数,再调用子类的构造函数,释放时,先调用当前类的析构函数,再调用父类的析构函数。
2024-06-18 11:00:48
959
原创 C高级知识
fputc(ch,fp): ch(一个常量或变量),fp(文件指针变量) 把一个字符写到磁盘文件(fp所指向的文件),成功返回写入的字符,失败返回EOF。fseek(文件类型指针,位移量,起始点):移动文件内部的位置指针,一般用于二进制文件,在文本文件使用时,需要进行转换,计算的位置会出现错误。ftell函数:得到流式文件中的当前位置,使用相对于文件头的位移量表示。calloc:在内存中动态分配n个长度为size的连续内存空间,返回一个指针,该指针指向动态分配的连续内存的首地址,若出错,返回NULL。
2024-06-15 22:17:26
756
原创 C基础知识
字符函数:isalpha(检测某个字符是否字母,如果是返回非0值,不是返回0)、isdigit(检测某个字符是否数字,若是返回非0值,不是返回0)、isalnum(检测某个字符是否字母或数字,若是返回非0,不是返回0)字符串1=字符串2,返回0,字符串1>字符串2,返回正数,字符串1<字符串2,返回负数。如果外部文件要访问,需要用EXTERN关键字进行引用修饰。字符串连接:strcat (字符串1,字符串2) ,把字符串2连接到字符串1的末尾,称为一个新字符串,并删除字符串1中原有的串结束标志“\0”
2024-06-14 14:01:51
287
原创 SQL Server 高级
批处理级事务:只能应用与多个活动结果集(MARS),在MARS 会话中启动的SQL显示或隐式事务变为批处理事务,当批处理完成时没有提交或回滚的批处理级事务自动由SQL server进行回滚。使用CROSS JOIN 连接,没有WHERE子句的交叉连接将产生连接所涉及的表的笛卡尔集,第一个表的行数乘上第二个表的行数等于笛卡尔结果集的大小。索引视图:创建有索引的视图,他经过计算并存储自己的数据,可以提高某些类型查询的性能,尤其适合聚合许多行的查询,但不适合经常更新的基本数据集。
2024-06-13 21:20:12
851
原创 SQL 基础知识
4、全部变量: 全部变量以@@开头,SQL Server 系统内部事先定义好的变量,不需用户参与定义,作用范围任何程序均可随时调用。@@FETCH_STATUS:返回上一次使用游标FETCH操作所返回的状态值,且返回值为整型(0,成功,-1,失败或此行不在结果集中,-2,被提取的行不存在)4、PRINT:向客户端返回一个用户自定义的信息,即下是一个字符串,局部变量,或全部变量的内容 PRINT @TEST|@@ERROE|‘FDJAKD’@@ERROR:返回执行上一条SQL语句所返回的错误代码。
2024-06-13 11:40:56
679
原创 .net core学习备忘录一
2、服务注册:servicecollection (管理对象的引用关系),addsingleton/addtransient/addscoped(注册服务),buildserviceprovider(获取serviceprovider).getservice(获取实例),getrequiredservice(若服务不可用,抛出invalidoperationexception异常)1、垃圾回收器包含:标记阶段,计划阶段,重定位阶段,清扫阶段,压缩阶段。4、app.run:将中间件添加到管道,终结中间件。
2024-06-06 19:58:47
406
原创 Vue知识点汇总
10、钩子函数的参数:el(指令绑定到的元素,可直接操作DOM),binding(一个对象,包含属性:instance(使用指令的组件实例) ,value(传递给指令的值),oldvalue(先前的值),arg(指令的参数:arg),modifiers(修饰符.修饰符))、vnode:el参数收到的真实的DOM元素的虚拟节点,prevNode:上一个虚拟节点,仅在beforeUpdate和updated钩子中可用。computed:计算属性,当依赖属性的值发生变化时,属性值会自动变更,DOM也同步更新。
2024-06-06 14:44:04
719
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人