关系逻辑

如何运用DDD - 领域服务

自闭症网瘾萝莉.ら 提交于 2019-12-11 17:40:35
目录 如何运用DDD - 领域服务 概述 什么是领域服务 从实际场景下手 更贴近现实 领域服务VS应用服务 扩展上面的需求 最常见的认证授权是领域服务吗 使用领域服务 不要过多的使用领域服务 不要将过多的行为都给了领域服务 总结 小彩蛋 如何运用DDD - 领域服务 概述 本文将介绍领域驱动设计(DDD)战术模式中另一个非常重要的概念 - 领域服务。在前面两篇博文中,我们已经学习到了什么是值对象和实体,并且能够比较清晰的定位它们自身的行为。但是在某些时候,你会发现某一些业务行为好像不容易落到单个实体或者值对象身上,并且会为放置这一部分业务逻辑而困惑。此时,你可能需要一个领域服务来完成操作。 那么,到底什么是领域服务呢?怎么发现领域中的领域服务呢?领域服务和传统的应用服务又有什么区别呢?本文将从不同的角度来带大家重新认识一下“领域服务”这个概念,并且给出相应的代码片段(本教程的代码片段都使用的是 C# ,后期的实战项目也是基于 DotNet Core 平台)。 什么是领域服务 在开始之前,还是说一点题外话吧:如果大家读过这个系列的前几篇文章,可能都会发现该系列的风格都是从原著的解析开始,然后结合了自身的一些案例和实际场景来为大家解读领域驱动中的一些概念。我也不知道这样的写作方式能不能让大家更清楚的理解,所以如果大家有什么建议的话可以在评论区留言,我一定会认真的听取大家的意见和建议。

程序语言编年史

喜欢而已 提交于 2019-12-11 16:18:48
程序语言编年史 概述 这次咱们聊下程序语言的发展史,除了程序语言,还会着重讲下程序语言密切相关的计算机的发展史,顺带讲下同时期与程序语言和计算机相关领域的发展,为什么要把程序语言和计算机相关领域放到一块讲, 因为这些领域和计算机的关系太密切了, 程序语言是 程序员 和计算机沟通交流唯一方式, 计算机的计算模型的发展, 还有计算机的应用领域的发展都对程序语言有着深刻的影响. 通过计算机相关领域的发展, 我们能从中可以找到一些影响程序语言关键因素, 看看 这些因素是如何推动程序语言一步步发展成今天这个样子的. 计算机发展史 计算机的发展可以分为两条线进行追溯, 一条是计算理论的发展, 一条是计算机实体的发展, 下面我们看看计算理论和计算机的发展轨迹. 理论模型的演变 计算理论是近现代才出现的一个数学分支,主要研究可计算性,计算的复杂度,计算模型(计算理论中两大计算模型:图灵机,lambda演算),形式语言(编程语言也是一种形式语言).我们可以看到计算理论主要研究的对象的名字中有三个带了 计算 ; 计算 这个词很常见,好像和这些词汇所表达的意思挺相近:四则运算,数值计算,逻辑运算.本节就以 计算 为主线介绍下计算是什么,以及其演变历史,还有它和计算理论的关系. 史前数学:数值计算 公元前2500年,在美索不达米亚的一块泥板上记录着谷仓里面有1152000,每个人分7分,可以分给多少人

简单哲学:第一位哲学家泰勒斯

落爺英雄遲暮 提交于 2019-12-11 13:24:52
简单哲学:第一位哲学家泰勒斯 原创: 虞舜 哲学之王 2018-05-25 泰勒斯是公认的古希腊,或者说全人类第一位哲学家,讲哲学史,那第一个就要讲泰勒斯,这主要是四个原因: 从时间上泰勒斯确实最早,他的出生大约在公元前624-640年之间,具体不可考,各有各的说法,去世的大约在公元前554-543之间,同时期孔子出生在公元前551年,479年去世,老子571年,去世471年,所以中国讲历史不是没有道理,孔子的后代好像现在还在台湾,而且孔子说的话我们都能读到,但是泰勒斯就不同了,我们没有他的著作,也不知道他写过著作没有,研究他都是通过二手资料,这里主要是亚里士多德做了一些工作。但是不管怎么说从时间上,泰勒斯是当之无愧的第一。 泰勒斯提出了第一个哲学问题:世界的本原是什么?或者说本体是什么? 他不仅提出了这个问题,而且用他自己的方式解决了,那就是水。 他自己的这种方式就是:历史性的展现了一种哲学的思考方式,那就是用以经验观察为基础,并辅以理性思辨,而这正是哲学思维的本质,所以我们也称泰勒斯为第一位自然哲学家。我们第一篇介绍希腊神话的时候说过,我们要逐步展现,哲学家们是如何背离这种哲学思维本质,逐步让理性主宰世界,一步一步把我们带到天上,然后又掉到沟里的。 以上四点,可以说当之无愧必须要把泰勒斯当做人类史上第一个哲学家。 泰勒斯是米利都人,就在今天的土耳其艾登省内

内存管理

╄→尐↘猪︶ㄣ 提交于 2019-12-10 00:29:19
内存管理 习题 一.选择题 1、设备分配问题中,算法实现时,同样要考虑安全性问题,防⽌在多个进程进⾏设备请求时,因相互等待对⽅释放所占设备所造成的(D)现象。 A.瓶颈 B.碎⽚ C.系统抖动 D.死锁 2、主存与辅存间频繁的页⾯置换现象被称为(C)。 A.请求调页 B.碎⽚整理 C.系统抖动 D.输⼊输出 3、在可变分区存储管理中,最差适应分配算法要求对空闲区表项按( C)进⾏排列 A.地址从⼤到⼩ B.地址从⼩到⼤ C.尺⼨从⼤到⼩ D.尺⼨从⼩到⼤ 若为最优适应分配算法则D 最优适应分配算法可把空闲区按长度以递增顺序登记在空闲区表中。分配时顺序查找空闲区表,由于查找时每次总是从分区中的最小的一个区开始,所以,找到的第一个能满足作业要求的分区,一定是所有能满足作业要求的分区中的最小的一个分区。 4、段页式存储管理汲取了页式管理和段式管理的长处,其实现原理结合了页式和段式管理的基本思想,即( B )。 A、⽤分段⽅法来分配和管理物理存储空间,⽤分页⽅法来管理⽤户地址空间。 B、⽤分段⽅法来分配和管理⽤户地址空间,⽤分页⽅法来管理物理存储空间。 C、⽤分段⽅法来分配和管理主存空间,⽤分页⽅法来管理辅存空间。 D、⽤分段⽅法来分配和管理辅存空间,⽤分页⽅法来管理主存空间。 段页式存储管理兼有页式管理和段式管理的优点,采用分段方法来分配和管理用户地址空间,用分页方法来管理物理存储空间。

web前端入门到实战:CSS的逻辑属性与盒子模型

邮差的信 提交于 2019-12-09 22:44:33
首先开篇之前先提个问题: 为什么 Flex box 跟 Grid box 的是以 start 、 end 为排列规则,而不是常规的 top 、 right 、 bottom 跟 left ? 先不要急着往下翻,大家先思考一下。 这个问题的答案,鱼头会在文章中给出,欢迎大家带着这个问题往下翻阅,如果已经知道答案,也可以看看跟大家所知道的答案是否一致。 CSS的逻辑属性 2017年5月18日,W3C的 CSS工作组(CSS Working Group) 发布了 CSS逻辑属性和值(CSS Logical Properties and Values Level 1) 的首份工作草案(First Public Working Draft)。不同的书写模式(writing mode)中,可以抽取出共性的抽象概念(如开始位置,或行),这些逻辑抽象概念需要在不同书写模式下映射到左或右、上或下等物理的概念上。一些CSS布局可能依赖这些共性的逻辑概念。该 CSS 模块给出了用于通过逻辑方式(而不是基于物理坐标、书写方向和维映射等)控制布局的逻辑属性和取值(logical properties and values)。这个模块来源于CSS21中关于逻辑属性和值的特性。 对于前端来说,我们一直习惯于使用 top 、 right 、 bottom 、 left 来定义我们的 HTML 元素

Linux kernel device mapper

为君一笑 提交于 2019-12-09 14:26:35
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,如图 1。 图1 Device Mapper的内核体系架构 在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照等,图中 linear、mirror、snapshot、multipath 表示的就是这些 target driver。Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。Device mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。因此整个 device mapper 机制由两部分组成--内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。在下文中,我们分内核和用户空间两部分进行介绍。 内核部分 Device mapper

界面之下:还原真实的 MVC、MVP、MVVM 模式

∥☆過路亽.° 提交于 2019-12-09 13:29:47
前言 做客户端开发、前端开发对MVC、MVP、MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式。网上很多文章关于这方面的讨论比较杂乱,各种MV*模式之间的区别分不清,甚至有些描述都是错误的。本文追根溯源,从最经典的Smalltalk-80 MVC模式开始逐步还原图形界面之下最真实的MV*模式。 GUI程序所面临的问题 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息。用户输入行为(键盘,鼠标等)会执行一些业务逻辑,可能会导致对应用程序数据的变更,数据的变更自然需要用户界面的同步变更以提供最准确的信息。例如用户对一个电子表格重新排序的操作,应用程序需要响应用户操作,对数据进行排序,然后需要同步到界面上。 在开发应用程序的时候,以求更好的管理应用程序的复杂性,基于职责分离(Speration of Duties)的思想都会对应用程序进行分层。在开发图形界面应用程序的时候,会把管理用户界面的层次称为View,应用程序的数据为Model(注意这里的Model指的是Domain Model,这个应用程序对需要解决的问题的数据抽象,不包含应用的状态,可以简单理解为对象)。Model层对应用程序的业务逻辑无知,只保存数据结构和提供数据操作的接口。 有了View和Model的分层,那么就有了两个问题: 响应用户操作的业务逻辑

在WPF中自定义控件

半腔热情 提交于 2019-12-09 04:04:49
周银辉的开发博客(WPF) 在WPF中自定义控件(1) 一, 不一定需要自定义控件 在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样式就可以了.是否需要我们来自定义控件,这需要你考虑目前已有控件的真正逻辑功能而不要局限于外观,如果目前的控件都不能直觉地表达你的想法,那么你可以自己来打造一个控件,否则,也许我们仅仅改变一下目前控件的模板等就可以完成任务.很多人在自定义控件上经常犯的错误是:重复撰写已有的逻辑 二,UserControl还是CustomControl? 要在WPF中自定义一个控件,使用UserControl与CustomControl都是不错的选择(除此之外,还有更多选择,比如打造一个自定义的面板,但这不在本文的讨论范围),他们的区别在于: UserControl,其更像WinForm中自定义控件的开发风格,在开发上更简单快速,几乎可以简单地理解为:利用设计器来将多个已有控件作为子元素来拼凑成一个UserControl并修改其外观,然后后台逻辑代码直接访问这些子元素.其最大的弊端在于:其对模板样式等支持度不好,其重复使用的范围有限. CustomControl, 其开发出来的控件才真正具有WPF风格,其对模板样式有着很好的支持

在WPF中自定义控件

烂漫一生 提交于 2019-12-09 03:37:29
分享一下我老师大神的人工智能教程!零基础,通俗易懂! http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 周银辉的开发博客(WPF) 在WPF中自定义控件(1) 一, 不一定需要自定义控件 在使用WPF以前,动辄使用自定义控件几乎成了惯性思维,比如需要一个带图片的按钮,但在WPF中此类任务却不需要如此大费周章,因为控件可以嵌套使用以及可以为控件外观打造一套新的样式就可以了.是否需要我们来自定义控件,这需要你考虑目前已有控件的真正逻辑功能而不要局限于外观,如果目前的控件都不能直觉地表达你的想法,那么你可以自己来打造一个控件,否则,也许我们仅仅改变一下目前控件的模板等就可以完成任务.很多人在自定义控件上经常犯的错误是:重复撰写已有的逻辑 二,UserControl还是CustomControl? 要在WPF中自定义一个控件,使用UserControl与CustomControl都是不错的选择(除此之外,还有更多选择,比如打造一个自定义的面板,但这不在本文的讨论范围),他们的区别在于: UserControl,其更像WinForm中自定义控件的开发风格,在开发上更简单快速,几乎可以简单地理解为:利用设计器来将多个已有控件作为子元素来拼凑成一个UserControl并修改其外观

论文笔记(一)SecureML: A System for Scalable Privacy-Preserving Machine Learning

风格不统一 提交于 2019-12-08 20:57:38
SecureML:A system for Scalable Privacy-Preserving Machine Learning 1 摘要及介绍 1.1 模型的大致架构 首先,主要模型中主要有客户端和两台服务器,假设这两台服务器不会恶意合作。   整个训练过程大致分为在线和离线两个阶段,在线阶段的主要任务就是利用本文提出的安全算数技术在共享的十进制数上进行模型的更新,根据混淆电路的思想,除了最后能得到的模型,什么数据也不会暴露出来;离线阶段的主要任务是服务于在线阶段的乘法运算——利用线性同态加密或者不经意传输生成必要的三元组,因为这个开销比较大,后期还提出了一种改进,用客户端来辅助生成三元组; 1.2 主要贡献 为线性回归、逻辑回归、神经网络这三种机器学习算法开发出了新型的隐私保护的深度学习协议 开发出了支持在共享的十进制数上的安全算数操作的技术 对于那些非线性激活函数,如sigmoid softmax,提出了一种支持安全多方计算的替代方案 以上提出的所有技术相较于目前的技术,在保证安全的前提下,速度上都有很大的提升 1.2.1 为三种机器学习算法开发出的隐私保护的协议 线性回归、逻辑回归和神经网络这三种机器学习方案非常简单但也非常常用,而且他们之间思想类似且一种递进的趋势。 所谓思想类似指的是他们都是有监督的机器学习算法,思路都是先前馈,算出交叉熵之后,在利用随机梯度下降