- 博客(49)
- 资源 (2)
- 收藏
- 关注
原创 DDD架构设计知道-降成本-限界上下文拆分(4)
都是为了赶进度快速的模仿,不思考反思,只是完成一个个单一功能而做的“短期工”.当然这也是“资本家”剥削压榨剩余价值的结果(要求赶工)。其实事件风暴主要的方式并不是需要很多的人,甚至有时候只好你对业务有所了解,自己玩转“事件风暴”也是没问题的。其实事件风暴就是大家小学都会的写事件记叙文的六要素,“时间”,“地点”,“参与者”,“事件的起因”,“事件的经过”,“事件的结果”。另一种就是用户故事。前面的一节,我们说领域模型分析设计“迭代三步走”中.第一步,定义合理的限界上下文,第二步,明确限界上下文之间关系。
2024-12-18 08:02:01
785
原创 事件六要素与DDD事件风暴
**读模型 (Read Model)** 和 **策略 (Policy)**:如前所述,读模型和策略提供了做出决策所需的信息和规则,它们可以被视为事件起因的一部分。- **类比到事件风暴**:虽然事件风暴不特别强调具体的时间点,但它确实关注事件发生的顺序。- **类比到事件风暴**:参与者直接对应于事件风暴中的参与者(Actor)。在事件风暴中,参与者通常用小黄色便签表示。- **时间**:我们将所有事件按照时间顺序排列在一条水平线上,从用户点击“提交订单”开始,到订单状态更新为“已发货”结束。
2024-12-03 18:03:32
405
原创 DDD架构设计知道(3)-降成本
在不考虑市场价格的前提下,部署在这些平台上的应用架构的质量是影响成本的关键因素。在DDD架构设计中,实现高效的限界上下文管理需要遵循几个步骤:首先,确保每个模块内部的设计符合高内聚低耦合的原则,即模块内部紧密联系,而与其他模块保持松散连接。接下来,合理地定义限界上下文,通过分析不同组件间的依赖关系,找到合适的分割点,减少不必要的依赖。因此,即使是一个小团队,也应该能够跨多个领域工作,而核心领域的开发则需由具备深厚领域知识的人才负责。在一个支持性和鼓励性的环境中,员工更容易产生新的想法,创造更优质的设计。
2024-11-28 08:11:42
433
原创 DDD架构设计知道(2)-愿景,价值观,使命
最后,当一个系统完成对用户是时候,作为领域DDD方法论分析和实现的系统服务.再给用户是时候。国企首先本身是国家企业,它承担着社稷民生的责任,所以使命优先,顺序是使命,愿景,价值观。比如阿里巴巴的愿景是“让天下没有难做的生意”,最后建立了一系列的企业文化价值观,最后支付宝“交给国家了”,顿时使命感油然而生。或多或少还是要对标企业的愿景来做事,因为这是工作奋斗的方向,时不时都要回首对标下企业的愿景初衷,不忘初心。特别是容易产生争执的环境下,比如会议室,部门之间的走廊,团队之前的办公区域,团队内部办公区等等。
2024-11-20 08:31:05
447
1
原创 DDD架构设计知道(1)
而对于个人来说意义更重大,庄子云:”技近乎于道”,通过”事上炼”去感受自然与生命的乐趣,并幸福的生活着。总之,在当今社会,每个人个人追求肯定是优先的,而追求架构的个人终极目标,需要在“事上炼”达到企业架构目标的终极要求的同时,满足个人终极目标。看过很多人写架构设计的文章,绝大多数都是站在企业的角度谈“术”的层面。软件项目是团队合作的,开发从开始写第一行代码开始,就开始了项目复杂度的不断“熵”增直到”热寂”的生命周期之旅。但架构设计就是要约束这种熵增,延缓它的熵增,增加它的有序,而延缓它的无序性发展。
2024-11-18 20:13:04
627
原创 状态与事件是一体两面
相比之下,面向事件的编程模式,如函数式编程中的响应式编程、发布-订阅机制,以及领域驱动设计(DDD)中的事件溯源和领域事件策略,则更注重通过事件流来引导和控制状态的变化。面向状态的编程方法,例如命令式编程和面向对象编程,侧重于分析实体间的关系及个体的变化,以构建状态模型,并通过编程手段实现事件驱动的状态转换。综上所述,无论是在当前的应用实践中,还是未来的创新探索中,深刻理解并巧妙运用状态与事件的相互作用原理,对于打造高效能、高弹性的信息系统具有极其重要的意义。(有状态的tcpip链接图)
2024-11-06 23:07:38
602
原创 码农的未来-顺势而为
通过聚合根的概念确保了模型的完整性和边界清晰,合理地界定了对象间的关联度,从而将复杂的对象网络分解成若干个高度内聚的小模块。在这种编程模式下,状态变化是仿佛是因事件行为的流过而冲刷出的状态改变,“顺势而为”,“顺其自然”的一样。函数是数学中的一个基本概念,它描述了一种特殊的映射关系,即从一个集合(称为定义域)到另一个集合(称为值域)之间的对应法则。在这个映射中,定义域中的每一个元素都恰好对应值域中的一个元素。在这个快速变化的世界里,采取一种更加灵活、自然的态度去设计和实现软件,将是未来发展的趋势。
2024-11-05 09:16:15
282
原创 主体Subject和客体Object-西方哲学的思维方式
这种思维方式强调了观察者(主体)与其所观察的事物(客体)之间的区分。当我们学习英语时,接触到的句子结构——主语(subject)、谓语(predicate)和宾语(object)——实际上反映了这种主体-客体的二元论思想。在编程领域,尤其是面向对象编程(OOP),这一概念被进一步发展为“对象”(Object),即程序中的实体,这些实体拥有属性和方法,可以用来模拟现实世界中的事物。尽管如此,随着全球化的推进和技术交流的加深,不同文化背景下的开发人员开始探索如何将各自的文化特色融入到软件开发实践中去。
2024-11-04 22:21:28
534
原创 从快速开发到深度建模:领域驱动设计如何重塑企业级软件开发
在这个阶段,业务系统开发往往被简化为基本的CRUD操作,强调的是快速开发与效率提升,而非深层次的业务逻辑分析。更重要的是,采用DDD不应仅仅出于追赶潮流的目的,而是真正认识到它所带来的价值——即通过更好地理解和服务于特定业务领域来创造高质量的产品和服务。初期,由于对DDD的认识不足以及相关资源匮乏,加之企业更加倾向于立即见效的投资回报模式,使得DDD并未得到广泛采纳。到了2014年前后,随着市场环境的变化和技术的发展,企业开始意识到单靠简单的功能实现已经难以满足日益复杂的业务需求。
2024-11-04 19:29:48
376
原创 代码的缘起
然而,面对日益复杂的系统开发任务,传统的编程范式显得力不从心。它引入了“对象”作为基本构建单元,将数据及其相关的行为封装在一起,模拟现实世界中实体之间的关系。这里的“对象”概念受到了西方哲学中主体“Subject”-客体“Object”二元论的影响,在编程领域表现为类(class)和实例(instance)的形式,其中每个对象Object都是特定类型的一个具体化表现。随着技术进步和社会需求的增长,出现了更加接近自然语言表达方式的高级语言,比如C/C++,它们简化了编程过程,提高了开发效率。
2024-11-04 19:19:37
231
原创 为什么DDD方法论值得尊重
资本家剥削劳动人民剩余价值,本来无可厚非他也是执行了资本规律。从2000年以来的java(j2se1.4稳定版出来后)企业级开发,无一例外倡导“贫血模型”,过程式开发。无论是sun的ejb 还是weblogic,Oracle等等均用无数例子证明了。做业务系统就是写crud,就是告诉工人阶级不要考虑太多,提高效率一般性工人的生产率才是当务之急。才可以赚取剩余价值,实现资本家的原始积累。在这个时期很多it企业并不考虑业务是什么,都属于一锤子买卖居多。会crud又或者说低代码能生成crud那就是牛x。20.
2021-09-24 22:10:36
326
原创 DDD并不是千层饼架构
近来研学DDD的同志们越来越多。刚开始大家都是“盲人摸象”的学习着。有些有趣的问题,闲来想说道说道。有些同志一直认为“ddd就是千层饼架构”。我想说这个话的,无非应该是两个方面觉得:一是认为技术分层多了一些,至少与三层架构对比(crud架构)多了领域层。二是 各种数值对象传递赋值多次,如:vo,dto,entity,do或po。 首先技术分层的主观层次是由架构设计师针对解决技术复杂度的分而治之的处理。是用来隔离每层高内聚的技术职责。而ddd在方法论层面仅强调领域层次的重要性,并没有在战术层面说一定要有所.
2021-09-24 22:09:12
150
原创 GWT-EXT GridPanel显示FormPanel模糊查询结果
首先当然是要提交查询条件了,这里我使用一个名为Search的Servlet来处理模糊查询。在FormPanel的Form中对其onActionComplete事件进行监听,获取Servlet返回的查询结果。而onActionComplete事件的触发需要Servlet返回一个JSON:{”success”,true},只有这里的success为true时才会触发该事件,为fal
2009-10-28 22:24:00
615
转载 [可爱的 Python]: Python 中的函数编程
尽管用户通常将 Python 看作是一个过程性和面向对象语言,但它实际上包含了实现完整函数编程所需的每样事物。本文讨论了函数编程的常规概念,并说明了在 Python 中实现函数技术的方法。我们最好从最难的问题开始:“到底什么是函数编程 (FP)?”一个答案可能会说 FP 就是您在使用例如 Lisp、Scheme、Haskell、ML、OCAML、Clean、Mercury、Erlang(或
2009-10-07 17:27:00
618
原创 Google 应用程序引擎(GAE) 绑定域名
Google 应用程序引擎(GAE) 绑定域名 Google App Engine中文意思Google 应用程序引擎,简写GAE;通过 Google App Engine,它即使在负载很重和数据量极大的情况下,也可以轻松构建能安全运行的应用程序,下面介绍下怎么绑定域名。如果你成功申请了 Google App Engine 的服务,并创建了自己的应用(Application)
2009-07-30 08:50:00
1081
原创 Windows apache django 配置指南
一、软件准备:1.1 python-2.5.1.msi 1.2 apache_2.2.8-win32-x86-no_ssl.msi 1.3 Django-0.96.1.tar.gz 1.4 mod_python-3.3.1.win32-py2.5-Apache2.2.exe 1.5 MySQL-python-1.2.2.win32-py2.5.exe 二、安装
2008-12-24 11:13:00
1309
原创 再谈开源ERP
前言 本文并非针对某个特定的开源ERP产品,也非对开源的ERP抱有某种成见,只是站在ERP用户的角度提出自己的一些想法。辩驳只是为了解惑。 提到开源软件,很多人首先想到的是LINUX。就这样一个由个人开发出的类似UNIX的操作系统居然能跟WIN系统在服务器领域进行抗争,并且取得了不小的战绩,真是不容易啊。大家可以很明显的看到:使用了LINUX服务器以后,公司的运营成本在降低--相对于WIN系统,L
2007-11-18 10:28:00
1331
原创 Java 中的 ClassPath 和 Package
Java 中的 ClassPath 和 Package关键词: Java 中的 ClassPath Package Java 中的 ClassPath 和 Package前言: 由于这两个问题新手问得较
2006-08-14 21:08:00
859
原创 配置管理流程
配置管理流程- - 1 概要1.1 内容规范配置管理活动,确保配置项正确地唯一标识并易于存取,保证基准配置项的更改受控,明确基线状态,在贯穿整个软件生命周期中建立和维护项目产品的完整性和可追溯性。1.2 适用范围对于不同类别的软件项目,配置管理的流程不同,可在本流程的基础上进行裁减。1.3 术
2006-07-12 11:48:00
1361
原创 Oracle导入程序Imp的使用详解
Oracle导入程序Imp的使用详解 Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],以下例举imp常用用法。 1. 获取帮助 imp help=y
2006-07-10 09:58:00
2957
原创 Oracle导出程序Exp的使用具体过程
1. 获取帮助 exp help=y 2. 导出一个完整数据库 exp system/manager file=bible_db log=dible_db full=y 3. 导出数据库定义而不导出数据 exp system/manager file=bible_db log=dible_db full=y rows=n 4. 导出一个或一组指定用户所属的全部
2006-07-10 09:55:00
1488
原创 Java 中的悲观锁和乐观锁的实现
Java 中的悲观锁和乐观锁的实现锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的“锁”,即给我们选
2006-07-04 16:21:00
1682
原创 如何在UNIX/LINUX环境中创建Oracle9i 数据库
一 创建数据库的步骤创建一个可使用的数据库共需要六步来完成:其中三步用于创建数据库,其余三步用于设置数据库,让它可以使用。1) 设置操作系统环境变量ORACLE_HOME、ORACLE_SID、PATH和LD_LIBRARY_PATH。2) 编辑/创建initsid.ora参数文件。 3) 在 SQL*Plus 中执行CREATE DATABASE命令。
2006-06-28 08:52:00
1015
原创 使用dbms_job包来实现数据库后台进程
使用dbms_job包来实现数据库后台进程1建立实现任务的过程在schema manager或SQL PLUS里建立如下过程 CREATE OR REPLACE PROCEDURE "CUSTOMER"."T_JOBTEST" asbegin update emp set active =0 where active =1 and date_publishe
2006-06-20 08:55:00
970
原创 ORACLE的存储过程的异步调用
http://tech.ccidnet.com/art/294/20030526/47427_1.htmlORACLE的存储过程的异步调用 作者:王辉 发文时间:2003.05.26 1. 关于作者 王辉 从1994年开始工作,曾担任教师、数据库管理员、主程序员、项目经理,现在深圳一家公司担任项目经理。可以通过ddxxkk@21cn.com联系。 2. 前言 在ORACLE数据
2006-06-20 08:53:00
735
原创 自己设计的javascript 行政区划表示法
//区县地区var x1=new Array(15);x1[0]=new Array(,,,)x1[1]=new Array( ,,市辖区,);x1[2]=new Array( ,,荔湾区,);x1[3]=new Array( ,,越秀区,);x1[4]=new Array( ,,海珠区
2006-05-11 17:39:00
2116
原创 UltraEdit的问题及其编码
一.关于各种编码文件标记头各种编码文件开头UTF-8以 EF BB BFUTF-16以 FE FF(big-endian) FF FF(little-endian)UNICODE以 FF FE一.各种编码对于中文:各种编码对于中文:ASCII 中文 2个字节;英文:1个字节UNICODE 中文 2个字节;英文:2个字节UTF-8 中文 3
2006-04-30 09:26:00
4853
原创 说说大型高并发高负载网站的系统架构
说说大型高并发高负载网站的系统架构转载本文请著名出处:Just Do IT (http://www.toplee.com) lee@toplee.com我在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和
2006-04-28 15:50:00
17575
17
原创 Linux -- 权限管理
Linux -- 权限管理权限管理: chmod(更改文件权限),chown(更改文件拥有者),passwd(设置用户密码),su(用户切换),useradd(增加用户),groupadd(增加用户组) 系统的权限的给定涉及到系统的安全问题,所以做好系统权限管理是非常重要的。 1,chmod,更改文件权限。文件的权限分为3个部分,即属主(文件所有人)权限,用户组权限,其他用户权限,
2006-04-19 11:02:00
1075
原创 Linux分区知识
下来你的首要问题是“我的机器有16G,分了一个C盘4G,两个D,E盘各6G”我还想保留 C盘的windows,我能把Linux安装到D盘或者E盘上么?呵呵,非常好,你知道Linux是 一个操作系统,可能要把windows弄掉,但是遗憾的是你对硬盘,分区的理解是错误的。 下篇文章会讲硬盘分区的问题。 OK,要讲硬盘分区了。在讲这个问题之前,我先来讲讲概念问题,什么是概念 问题呢?你还记得第一次,绝对
2006-04-06 23:33:00
807
原创 KDE vs GNOME
KDE vs GNOMEKDE与GNOME是很类似的:它们在本质上都是桌面环境,必须和窗口管理器配合使用,以提供类似于MS-Windows、OS/2、CDE和Mac OS的用户界面。所以他们都拥有图形化的文件管理器。在文件管理器中看到的对象可以是文件夹、子文件夹、程序、链接等。 对于文件管理器中的对象,你可以用鼠标来进行移动、拷贝等操作。单击右键选中浮动菜单中的“属性”,在弹出的对话框中就可以更
2005-12-29 15:59:00
1733
原创 堆和栈的区别
堆和栈的区别堆(heap)和栈(stack)有什么区别??简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
2005-12-15 21:14:00
917
原创 cygwin是一个在windows平台上运行的unix模拟环境
根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。1 引言cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其
2005-12-12 00:19:00
1175
原创 开源软件新时代 55个经典开源Windows工具
开放源代码软件已经成为一个时髦的名词,这里有两个有力的证据:Firefox浏览器的下载人次超过了2500万;同时,基于Linux的Web服务器也占据了最大的市场份额。人们普遍相信,开放源代码软件(open-source software,简称OSS)要比专有软件系统(即声明用户不能分享或修改软件的软件系统)要更安全。这可能有两个原因:首先,由于开源软件的源代码是向所有人开放的,因此任何人都可以找出
2005-11-01 13:19:00
1211
原创 在linux下软件的安装和卸载
在linux下软件的安装和卸载 在linux下软件的安装和卸载(转凌晨1点半http://61.52.11.253/viewthread.php?tid=343)一、 了解Linux应用软件安装包: 通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。 2) rpm包,如software-1.2
2005-10-19 16:43:00
1001
原创 Linux 指令大全
此帖送给初学LINUX的穷人们(LINUX的书太贵了)名称:cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank
2005-10-19 16:18:00
770
原创 EasyMock使用简明手册
在实际编写unit test的过程中,很多情况下我们会需要使用其他的组件(如和数据库相关的测试)。当我们是使用第三方提供的组件时,这并不是太大的问题,因为我们可以假设他们是无错的。但是一旦这些组件是我们自己的组件时,问题就暴露出来了。“单元测试出错了,但到底是谁的错。我的?他的?”,这种情况显然违反了测试的独立性原则。出现这种情况使得这个测试无法确切的指出是那个单元出现了问题,照成了排错的困难
2005-08-17 08:38:00
743
原创 POJO Application Frameworks: Spring Vs. EJB 3.0
POJO Application Frameworks: Spring Vs. EJB 3.0by Michael Juntao Yuan06/29/2005 Albert Einstein once said, "Everything should be made as simple as possible, but not simpler." Indeed, the pu
2005-08-09 22:18:00
1277
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人