首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可以落地的DDD到底长什么样?

为什么需要 DDD ​  在业务初期,功能大都非常简单,普通的 CRUD 就基本能满足要求,此时系统是清晰的。但随着产品的不断迭代和演化,业务逻辑变得越来越复杂,我们的系统也越来越冗杂。...事实上大部分情况下,领域对象的创建都不会相对太复杂,故我们仅需使用简单的构造函数创建对象就可以。...针对功能层面划分边界 ​  这个系统可以划分为运营管理平台和用户使用层,运营平 台对于抽奖的配置比较复杂但是操作频率会比较低。...抽象 : 使用抽象能够精简问题空间,而且问题越小越容易理解,比如说我们要对接支付,抽象的纬度应该是支付,而不是具体的微信支付还是支付宝支付。 DDD 的限界上下文可以完美匹配微服务的要求。...在我的观点来看,有点类似数据库的三范式,我们开始在学的时候并不太理解,当有足够的设计经验以后慢慢会体会到三范式带来的好处。

72410

可以落地的DDD到底长什么样?

为什么需要 DDD 在业务初期,功能大都非常简单,普通的 CRUD 就基本能满足要求,此时系统是清晰的。但随着产品的不断迭代和演化,业务逻辑变得越来越复杂,我们的系统也越来越冗杂。...事实上大部分情况下,领域对象的创建都不会相对太复杂,故我们仅需使用简单的构造函数创建对象就可以。...针对功能层面划分边界 这个系统可以划分为运营管理平台和用户使用层,运营平台对于抽奖的配置比较复杂但是操作频率会比较低。...抽象 : 使用抽象能够精简问题空间,而且问题越小越容易理解,比如说我们要对接支付,抽象的纬度应该是支付,而不是具体的微信支付还是支付宝支付。 DDD 的限界上下文可以完美匹配微服务的要求。...在我的观点来看,有点类似数据库的三范式,我们开始在学的时候并不太理解,当有足够的设计经验以后慢慢会体会到三范式带来的好处。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么 128 KB 的魂斗罗可以实现那么长的剧情?

    大家好,我是磊哥。 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧。...但只写1个字的word文档,有10956字节,而由于硬盘格式化要求,再多占用1332字节 我就写了一个字,真的什么都没干 现实中常见的产品、流行的技术,实际上和时代背景密切相关。...对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种“二级”表示方法能极大节约存储量。...下:理光2A03 音频芯片可以产生合成音效,能提供的音色可以在一定程度上配置,但非常有限。听听FC游戏的音乐可以体会到常用的音色几乎一样。...我觉得这个音频芯片最厉害的地方是可以同时播放几个音轨(但不能是和弦那种“同时”),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,主要是靠多个音轨的交替配合实现的。

    32810

    为什么 128 KB 的魂斗罗可以实现那么长的剧情?

    喜欢黑客技术和网络安全的,可以关注看看 为什么魂斗罗只有 128KB 却可以实现那么长的剧情?下面来给新生代程序员讲讲这里面的奥秘吧。...A:就说你们的音乐,这个音乐,我压到最低码率的mp3,也得至少1MB吧。 B:你怎么压的?一首背景音乐怎么可能超过1KB。 A:那你实现全屏卷轴,用了多少显存?...但只写1个字的word文档,有10956字节,而由于硬盘格式化要求,再多占用1332字节 我就写了一个字,真的什么都没干 现实中常见的产品、流行的技术,实际上和时代背景密切相关。...对每一个场景来说,使用若干数量的瓦片,场景用有限的瓦片拼接即可。这种“二级”表示方法能极大节约存储量。...我觉得这个音频芯片最厉害的地方是可以同时播放几个音轨(但不能是和弦那种“同时”),《魂斗罗》、《沙罗曼蛇》、《忍者龙剑传》的殿堂级音乐,主要是靠多个音轨的交替配合实现的。

    38330

    【小家java】AtomicLong可以抛弃了,请使用LongAdder代替(或使用LongAccumulator)

    ---- 每篇一句 传播正能量——做一个快乐的程序员 前言 如题,如果你对AtomicLong的使用、运行机制还不了解的话,请移步我上一篇博文:【小家java】原子操作你还在用Synchronized...LongAdder的优化思想 LongAdder所使用的思想就是热点分离,这一点可以类比一下ConcurrentHashMap的设计思想。...在实现的代码中,LongAdder一开始并不会直接使用Cell[]存储。而是先使用一个long类型的base存储,当casBase()出现失败时,则会创建Cell[]。...LongAdder可以代替AtomicLong吗? 话有说回来啊,JDK8并没有把AtomicLong标记为过期,所以肯定还是很多用武之地的。...因此如果你只需要做形如count++的操作,推荐使用LongAdder代替AtomicLong吧(阿里开发手册就是这么推荐的) DoubleAdder和DoubleAccumulator使用方法类似,这里不在介绍

    4K50

    为什么魂斗罗只有128KB却可以实现那么长的剧情?

    究竟是什么巧妙设计让它在如此有限的空间中诉说出如此悠长的故事?今天,我们一起揭开这个谜底。...游戏剧情 关于游戏的剧情发展和故事背景,简洁却不简单。游戏并没有使用大量的文字描述,而是利用开场动画和角色动作来进行叙述。...通过这种程序生成技术,游戏可以在保持丰富多样性的同时,减少数据存储需求。 音乐效果 难以忘怀的音乐和效果声,这些往往会被忽视的要素,在《魂斗罗》中却扮演着举足轻重的角色。...另外,局部使用汇编语言可以极大地提高性能和减小程序体积。现在的程序员几乎没有人会用汇编语言写代码了。...在魂斗罗这样的游戏中,在多个关卡或游戏模式中共享一套逻辑,通过加载不同的数据集来呈现不同的游戏内容,保留同样的游戏机制也可以节省不少的代码量。

    20110

    为什么魂斗罗只有 128KB 却可以实现那么长的剧情?

    FC上的图像,像素深度就2bit的索引而已 ,现在广泛使用的真彩色是24bit,包含alpha的需要32bit,这里就差了12倍到16倍。...音乐的话,FC采用的是8位midi音乐,而现在普遍用的是PCM音乐。类比到图像中,就像矢量图像和位图的区别。...对于什么64k 3d程序什么的,这完全是两码事,FC程序小只是因为需求的资源本来就很小而已,而那种64k 3d程序是因为采用Procedural generation方法,简单的说就是通过数学来描述,而不是通过记录结果的采样...,Procedural generation不光需要的存储空间极小,而且可以做到无限精度,缺点是难以描述复杂事物,并且对算力要求高,而不是用了什么外星压缩法。...总结 1.游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用2bit。2.程序员精心优化各种数据结构,每一bit存储都不浪费。3.声音只存储发声通道的调制参数序列,能复用就复用。

    53010

    为什么魂斗罗只有 128KB 却可以实现那么长的剧情?

    2bit 的索引而已 而现在广泛使用的真彩色是24bit 包含 alpha 的需要 32bit 这里就差了 12 倍到 16 倍 图像大小更是差距巨大 FC 普遍一个角色也就是 宽高十几个像素而已 与现在动辄宽高几千像素图像资源相比差了...数万倍到数百万倍 所以图像资源消耗的存储空间 至少差了 5~7 个数量级 音乐的话 FC 采用的是 8 位 midi 音乐 而现在普遍用的是 PCM 音乐 类比到图像中 就像矢量图像和位图的区别 总之...1000w 倍 你就不觉得小了 一些人还提到了什么 64k 3d 程序什么的 这完全是两码事 FC 程序小只是因为需求的资源本来就很小而已 而那种 64k 3d 程序是因为采用 Procedural...generation 方法 简单的说就是通过数学来描述 而不是通过记录结果的采样 Procedural generation 不光需要的存储空间极小 而且可以做到无限精度 缺点是难以描述复杂事物 并且对算力要求高...而不是用了什么外星压缩法 总结: 1.游戏大量复用图块,图块还使用调色板索引,好像每个像素才占用 2bit。

    73120

    为什么使用测试,可以为我们带来什么

    作者 | 陌无崖 转载请联系授权 导语 在对一个大项目进行开发的时候,测试时必不可少的,尤其是在微服务中,测试可以提高我们对代码的信心,在实际开发中,不可能等到将所有的代码部署完成才测试进行,在开发中...,在你的主函数中将会引用各种包,来进行测试输出在控制台,到时我们的控制台肯定也是充满了各种日志,用这种方式,将会大大的降低我们的开发时间,实际上在Go中造就为我们提供了一个测试的包,用这个包,我们可以在运行程序前统一的进行测试...如果测试成功便直接部署,不需要在修改我们的任何文件。我们可以测试上面的代码如下: 这里需要注意的是我们的测试文件的命名格式必须为*_test.go。...如果我们想要得到更多的信息,我们可以使用以下命令 go test -v hello_test.go ? 除了以上命令,还有其他命令如下: ? ?...总结 以上的例子比较简单,主要是了解为什么使用测试,以及测试可以为我们做些什么,在下面的系列文章中,将会逐渐将代码难度加大。 END

    43230

    FastGateway 一个可以用于代替Nginx的网关

    在我本人研究Yarp的时候经常用于公司项目的业务网关代理,这时候就个大佬问我是否可以实现动态加载HTTPS证书?...那时候我说不太可能实现,然而在某一天我看到 微软使用Yarp代替了Nginx吞吐量提升了百分之八十!...这个时候我就萌生了自己使用yarp造一个Gateway的项目,应为我本身也经常使用nginx作为网关,但是nginx的使用总得写conf,然后重启我的nginx,并且还需要配置证书重启,我就在想是否可以实现界面管理...一般简单使用就可以直接使用我们的docker-compose构建,非常简单 FastGateway支持哪些功能?...出入流量监控 使用环境变量控制是否启用流量监控,使用环境变量ENABLE_FLOW_MONITORING设置我们是否启用流量监控,如果为空则默认启动流量监控,然后可以打开我们的控制面板查看流量监控的数据

    20810

    免费拿走我的代码可以,但请对使用我的时间付费

    作为软件开发人员,我不得不承认开源代码改变了世界。这些开源软件原本可以变得更好,遗憾的是一些因素阻止了它。...我为开源工作付出了很多自己的业余时间,这些时间原本可以用来陪伴家人、享受生活或者写作,然而这样的付出并没有收到任何物质方面的回报。我今天在此声明,决定终止目前自己所从事的所有开源工作。”...此外由于社区合并的复杂性,基于这种方法,企业或组织可以轻松获得更多用户的支持。这种“重力”倾向于将社区聚集在一起。 但是这也会给项目维护者带来负担,因为他们必须回应这些改进。可同时他们自己得到什么呢?...例如,红帽公司需要更多企业使用 Linux 方便其销售 Linux 企业版,Oracle 使用 MySQL的目的也是为了推广企业版,Google 希望世界上所有人都使用它的手机和浏览器,而微软正试图将开发人员吸引到一个平台上然后推送其...当我谈到 “开源 ”时,我的意思是只要代码被许可,就可以用来构建专有的东西。这通常意味着许可证( MIT 、Apache 或者 BSD),但并不总是。

    1.1K80

    重新审视 Kotlin 反射,我觉得可以合理使用

    我之前每次跟别人分享 Kotlin 反射的时候,都会让大家小心点儿它,因为它一方面体积大,另一方面性能也差,不仅如此,还有一些小毛病,这些内容在我很久之前的一篇文章详细讨论了:Kotlin 反射你敢用吗...,只要它的慢在合理范围内,我们其实也是可以接受的。...11.0 26.3 Kotlin 反射 20.2 38.6 48.4 33.5 尽管仍然比 Java 反射耗时多一些,但对于使用反射的场景来说,这样通常也是可以接受的。...,这对于 Android 应用来说也不是什么大问题,毕竟 Apk 的瘦身大头应该在资源上,也许你把设计出的某一个序列帧动画用代码实现了就可以省掉好几 MB。...小结 其实之前让我觉得不安的主要是性能问题,显然这样看来倒也还好。而一些未完善的部分也在最近的版本得到了完善,因此 Kotlin 反射库的使用评级由“谨慎使用”上调为“合理使用”。 ----

    1.2K20

    玲珑swm32sNano —— 可以代替串口屏的核心板

    关于玲珑GUI,之前发了相关的教程: 一种代替串口屏的开源高效开发解决方案 | | 玲珑GUI在小熊派上的移植 现在开源这个项目的波哥做了一款可替代串口屏的核心板,我们来看下,这个是波哥送我的,...看起来很小巧: 之前已经做过两款板子,但是成本高和灵活度低难以推广,因此重新设计了一个核心板,批量生产的情况下,成本可以压低,同时硬件二次开发灵活方便。...7、配套辅助开发上位机 8、邮票孔设计 二、使用流程 1、安装keil 2、安装最新版本的LingLongGuiBuilderTool 如果以前安装过,需要手动删除(keil-tools-customize...swm32s原厂的ISP工具烧录 jlink使用swm32s原厂软件可以烧录 stlink、dap请使用群文件中的coFlash烧录 4、打开keil项目:App_swm32sNano 5、添加gui代码...虽然现在软件只有寥寥几个功能,但也实现了最基本的串口屏功能,请各位可以提出宝贵意见,让这套软件成长起来,能真正的帮助到广大开发人员,节省时间。

    2.2K30

    为什么我选择使用原型工具来代替纸原型

    纸原型的好处就在于与他人沟通的时候可以进行及时修改,也容易修改,并且能随时随地完善我的想法和思路。但当我在实际工作中使用纸原型一年后,使用纸原型的诸多弊端开始暴露出来: 1. 不易保存。...最重要的是原型软件修改方便,很多原型工具都有快照存档,我可以直接修改,无需再浪费时间画同样的部分了。...Mockplus是我使用中比较顺利的原型工具,一开始就看中了它的简单,易用,非常适合我这样的菜鸟。开箱即用的组件有几百个,自带了几千个矢量图标,已基本满足了我的需要。...我一般只需要把组件拖到页面上然后调整一下就可以了。使用一段时间后,我发现它在交互设计方面也很好用,无论是跳转页面还是在页面内做组件交互都挺快的。 ?...你可以多试几款原型工具,一般的原型工具都有免费试用,你可以先选择一个学习成本不高,又简单易学的原型工具,例如Mockplus。如果你喜欢在纸上画原型,相信你跟我一样会喜欢它的。

    78150

    为什么我选择使用原型工具来代替纸原型

    纸原型的好处就在于与他人沟通的时候可以进行及时修改,也容易修改,并且能随时随地完善我的想法和思路。但当我在实际工作中使用纸原型一年后,使用纸原型的诸多弊端开始暴露出来: 1. 不易保存。...最重要的是原型软件修改方便,很多原型工具都有快照存档,我可以直接修改,无需再浪费时间画同样的部分了。...Mockplus是我使用中比较顺利的原型工具,一开始就看中了它的简单,易用,非常适合我这样的菜鸟。开箱即用的组件有几百个,自带了几千个矢量图标,已基本满足了我的需要。...我一般只需要把组件拖到页面上然后调整一下就可以了。使用一段时间后,我发现它在交互设计方面也很好用,无论是跳转页面还是在页面内做组件交互都挺快的。 ?...你可以多试几款原型工具,一般的原型工具都有免费试用,你可以先选择一个学习成本不高,又简单易学的原型工具,例如Mockplus。如果你喜欢在纸上画原型,相信你跟我一样会喜欢它的。

    70530

    C++核心准则​ES.71: 如果可以,使用范围for代替普通的for语句

    ES.71: Prefer a range-for-statement to a for-statement when there is a choice ES.71: 如果可以,使用范围for语句代替普通的...程序员或者好的静态分析软件或许可以判断f(v,&v[i])中的v实际上并不存在副作用,因此该循环可以被重写。通常情况下,最好避免在循环体中“乱用循环变量”。...Note(注意) Don't use expensive copies of the loop variable of a range-for loop: 不要在循环体中进行代价高昂的循环变量拷贝。...Better: 这会导致vs的每个元素都被拷贝。较好的做法是: for (string& s : vs) // ......检查循环代码,如果一个传统的循环只是按照顺序读取每个元素,而且对元素的操作不存在副作用,使用范围for语句重写循环代码。

    49820

    线程池为什么可以复用,我是蒙圈了。。。

    一、线程池状态 ---- 首先我们要明确线程池的几种状态 1. RUNNING 这个状态表明线程池处于正常状态,可以处理任务,可以接受任务 2....TERMINATED 线程池彻底终止状态 他们的状态转换图如下 ? 好了,知道了线程池的几种状态和他们是如何转换的关系之后,我们来看一下 当我们提交一个任务时,线程池到底发生了什么?!...我们平常使用线程池是这样使用的 for (int i=0;i<10;i++){ //创建10个任务 Task task = new Task("task"...execute里面究竟有什么奇怪的东西?...,线程复用的秘密肯定藏在了addworker里,哦对我没有头发 我们再来看一看他里面有什么鬼 三、addworker源码 ---- private boolean addWorker(Runnable

    54820

    Effective C++条款3 我可以不使用const?

    前言 const是C++中用得非常频繁的一个关键字,但是如果你不使用这个关键字,对程序的运行结果影响不大,那么,我可以不使用const吗?...但是为了安全,推荐使用const,这是一个良好的习惯,坚持下去的结果是你的代码将变得更加健壮,当然你也可以不使用const,只不过当代码量到一定程度后,你的代码将会变得比较脆弱,而且随着量级的一步步升高...,可以通过上面这种常用的例子来记忆,hello world是字符串常量,自然是不会改变的。...采用const引用,既可以避免多余的函数调用,也能保证数据不被修改。 如果不使用const直接传递引用,调用者会认为这个对象是可以被更改的。...但是如果你使用了mutable关键字,那么情况就不一样了,因为这个关键字使得你可以在const函数中修改mutable类型的值。

    58730

    我写的 Bug 居然可以这么美

    就像这样子,我天,我承认我有严重的 Bug 洁癖了。。 ?...当然有了,在 Python 中,没有什么问题是一个库解决不了的,如果有,那就等你去开发这个库。...环境要求 由于使用了 pretty-errors 后,你的 traceback 信息输出,会有代码高亮那样的效果,因此当你在使用测试使用 pretty-error 时,请确保你使用的终端可以输出带有颜色的字体...在 windows 上你可以使用 Powershell,cmder 等 在 Mac 上你可以使用自带的终端,或者安装一个更好用的 iTerm2 2....以上,就是我对 pretty_errors 的使用体验,总的来说,这个库功能非常强大,使用效果也特别酷炫,它就跟 PEP8 规范一样,没有它是可以,但是有了它会更好一样。

    92640
    领券