我们抛开前端的实现,去理解和整理业务建模未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。的具体内容,我梳理出这些概念:业务实体、本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net业务事件、业务逻辑、流程阶段、交互、视图【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】。
【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。业务实体转载请注明出处:www.tangshuang.net
【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】本文作者:唐霜,转载请注明出处。实体一般用名词表示。一项业务可能包含多个【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net业务实体,一个业务实体可以理解为一个用于【本文首发于唐霜的博客】【未经授权禁止转载】表达清晰内容的对象,一般是一个由多个字段【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】组成的对象。业务实体的作用是定义实体包含【版权所有,侵权必究】【版权所有,侵权必究】哪些字段,以及字段本身的基本元数据,这些著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。元数据包含但不限于:该字段的类型、该字段转载请注明出处:www.tangshuang.net【未经授权禁止转载】是否是多个值、该字段是否包含字段解释说明本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】、该字段是否有某些特殊的标记、该字段是否【作者:唐霜】本文版权归作者所有,未经授权不得转载。一定要依赖另外的字段等等。这些基础信息被【本文首发于唐霜的博客】未经授权,禁止复制转载。定义在实体中。
【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】业务事件本文作者:唐霜,转载请注明出处。
本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。【本文受版权保护】【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】事件一般用动词表示。业务事件是在业务实体本文作者:唐霜,转载请注明出处。【未经授权禁止转载】的基础上的真实业务表达。实际上,我们在讲本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】“业务”时,往往是指一个“业务事件”,例【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。如我所在的投融行业,“投资”“融资”就是本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。对应的事件,在投融行业,你需要去了解一次著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。投资/融资行为,都会发生哪些事件,这些事【转载请注明来源】【版权所有】唐霜 www.tangshuang.net件是由谁,在什么时间、地点发起,持续了多著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。久时间,过程中都必须发生哪些事情。当然,转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。对于业务事件这个概念本身,它不包含“过程本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。中发生了哪些事”,因为这些事处于业务事件【作者:唐霜】【本文首发于唐霜的博客】之外,只是与它有强烈关联罢了。在建模时,本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net我们的系统中,往往是以围绕业务事件为中心【本文受版权保护】【版权所有】唐霜 www.tangshuang.net进行的,特别是在前端,因为前端涉及用户的【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】交互,而在界面上一次性呈现的,往往是这一原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。业务事件的全部,而几乎不会以某个业务实体原创内容,盗版必究。本文作者:唐霜,转载请注明出处。为单位进行独立呈现。这也就意味着,在前端【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】,实际比在后端要进行更复杂的串联思考。
著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】【版权所有,侵权必究】事件边界【原创不易,请尊重版权】
【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。如上所述,一个业务事件往往囊括多个业务实转载请注明出处:www.tangshuang.net【作者:唐霜】体,比如一次投资行为,要囊括投资方、被投【本文首发于唐霜的博客】【版权所有,侵权必究】方、投资团队(业务人员)、基金方(如果存著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。在SPV),同时要囊括该次投资的交易信息【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】、各类合同文件等等,而其中的每一个实体,转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。往往右内涵自己更细的实体描述,例如被投方【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net要包含被投的公司/主体、其管理层人员、上未经授权,禁止复制转载。【本文首发于唐霜的博客】市信息、已有的投资人等等信息。不过,我们未经授权,禁止复制转载。【原创不易,请尊重版权】仍然要为一次投资事件划定边界,该事件包含【作者:唐霜】【本文受版权保护】了上述实体,但这一关系也可能仅仅是引用关【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】系,而不是从属关系;另一方面,该事件还会【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】有自己的流程,我们都知道投资流程非常复杂【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】,设计的钱、人、机构都很多,但是,这些信【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。息往往并不是该次投资的本体信息,它们是附【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net带出来的,我们可以在项目里面加一个流程的著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。引用,也可以在流程里加一个项目的引用,都【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net是可以的,因此,这两者就有比较明确的边界【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。,我们建模的时候不需要把流程的问题考虑在未经授权,禁止复制转载。【未经授权禁止转载】该事件内。
未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】【作者:唐霜】【版权所有,侵权必究】总而言之,“业务事件”虽然用动词表示,但【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。是往往具有名词意义。比如,我现在要“做一【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】次投资”,这里的“投资”本身虽然是动词,本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】但在“做一次”的动词前提下,它就是名词。未经授权,禁止复制转载。【转载请注明来源】而名词的建模往往具备通用的方法论。
【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【版权所有,侵权必究】未经授权,禁止复制转载。业务逻辑【版权所有】唐霜 www.tangshuang.net
【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net【未经授权禁止转载】业务逻辑本质上是业务规则,所谓规则,就是著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】一条一条的前提与指令集合,这在本栏目的其本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。他文章中有解释。所谓“前提与指令”,就是本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】“当A的时候,应该B“,A是前提,B是指著作权归作者所有,禁止商业用途转载。【本文受版权保护】令。而指令在前端是非常难以固定化的,因为本文作者:唐霜,转载请注明出处。原创内容,盗版必究。在前端,指令除了变更数据、状态,往往还要本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。求UI层面作出响应,而后端在这一点上就轻转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net松很多,常常只需要变更数据或状态即可。因【作者:唐霜】【原创不易,请尊重版权】此,在前端,这一部分不得不分开,虽然它们本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】原本应该耦合在一起,但是从前端的特性出发【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net,我们必须把它们原子化拆分,其中“前提”【转载请注明来源】【版权所有,侵权必究】往往被集中管理,而“指令”则被分散,有的【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。不设计UI层面,只涉及数据和状态,就可以著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】和“前提”并且放置,而涉及UI层面的,只【本文首发于唐霜的博客】【未经授权禁止转载】能在视图层中管理。而真正要执行该逻辑时,本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。我们必须从多个地方取出“前提”和“指令”【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net,然后进行运行。
【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。原创内容,盗版必究。另外,“前提”和“前提”之间往往还有一定【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net的先后、嵌套顺序,但是常常“指令”又仅对本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net单一“前提”进行响应,这也就意味着在管理转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。上其实需要非常小心,即使做了非常强的封装【未经授权禁止转载】【未经授权禁止转载】,也必须考虑分散管理和集中使用之间的冲突原创内容,盗版必究。【本文受版权保护】所带来的不确定性。而大部分前端系统出现业【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。务层面的bug,都是因为这个管理和使用的【转载请注明来源】著作权归作者所有,禁止商业用途转载。不当造成的。
【未经授权禁止转载】【作者:唐霜】未经授权,禁止复制转载。【版权所有,侵权必究】原创内容,盗版必究。我们要探索一种合理且高效的业务逻辑管理模未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。式,在这种模式下,前提和前提之间的顺序关【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】系可以很好维护,与此同时,前提和指令具有【原创不易,请尊重版权】【本文首发于唐霜的博客】绑定关系,有这样的机制的话,当逻辑开始运【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net行,它们就必须按照特定的顺序,以及在特定【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。的节点上执行特定指令,如此运行,这一就可原创内容,盗版必究。【版权所有,侵权必究】以避免很多问题。
【本文受版权保护】【作者:唐霜】【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】流程阶段本文作者:唐霜,转载请注明出处。
【关注微信公众号:wwwtangshuangnet】【本文受版权保护】【未经授权禁止转载】流程往往是针对事件的,可以说它是事件的衍【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。生品,当一个业务(事件)发生时,如果它没本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。有特殊的需要,就不需要流程,它仅仅成为一【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】个事件的记录。但是,如果这一业务需要不同【版权所有,侵权必究】【版权所有,侵权必究】层面的人在不同的情况下参与进来,最为常见【本文受版权保护】【作者:唐霜】的参与方式就是审批,当然还有补充信息、修【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net订错误、线下处理某些事情后记录到线上等等【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。。流程分阶段,人员在这个事件中的出场和离【转载请注明来源】未经授权,禁止复制转载。场也可能随着阶段的迁跃而发生。同时,非常【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。重要的一点是,事件中所包含的实体的字段,【关注微信公众号:wwwtangshuangnet】【作者:唐霜】在不同阶段可能会附加对应的业务逻辑。例如【转载请注明来源】【原创内容,转载请注明出处】,在阶段1时字段a不需要填写,但是到了阶未经授权,禁止复制转载。【本文首发于唐霜的博客】段2就必须填写。
著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】狭义的流程往往只发生在事件出现之后,但是原创内容,盗版必究。原创内容,盗版必究。广义的流程从事件出现之前就开始了。比如我【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。们现在准备开始投资一家公司了,那么我们其本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】实在开始之前就已经做了非常多准备工作,例本文作者:唐霜,转载请注明出处。【未经授权禁止转载】如收集该公司的各种信息,与该公司的一些高【版权所有】唐霜 www.tangshuang.net【转载请注明来源】层进行了接触等等。但是这些准备阶段的工作【作者:唐霜】本文版权归作者所有,未经授权不得转载。记录,常常因为我们不确定是不是准备作出投【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。资计划,而不知道把这些信息放在哪里,也就【版权所有,侵权必究】【转载请注明来源】是“在事件开始之前”,这些信息已经有了,原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。但是因为“事件还没有开始”,所以,这些信【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。息放在哪里呢?不管放在哪里,一旦我们准备【转载请注明来源】【版权所有】唐霜 www.tangshuang.net开始投资这家公司,在系统中去创建这次投资【本文受版权保护】【版权所有】唐霜 www.tangshuang.net事件时,这些信息就会马上拉取出来,作为该本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】事件的一些信息。也就是说,对于投资事件的未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。流程而言,在事件开始之前就已经存在了,只【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net是它是概念上的,而非真正存在。
【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。基于“广义流程”的理解,我们的事件业务逻原创内容,盗版必究。未经授权,禁止复制转载。辑的管理,就可以被关联到流程的阶段上,因【关注微信公众号:wwwtangshuangnet】【转载请注明来源】为这个事件从还未开始到事件结束,都处在流【本文受版权保护】原创内容,盗版必究。程中,而大部分逻辑都可以被确定在某个流程【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。阶段。(当然,有些逻辑是很底层的,应该直本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net接在实体或事件模型中写死,例如某一个字段【版权所有】唐霜 www.tangshuang.net【作者:唐霜】具有特定的业务性质,它的值一定是另外两个【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net字段计算而来,这种逻辑就不属于流程上的逻转载请注明出处:www.tangshuang.net【未经授权禁止转载】辑,而是底层逻辑。)
【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net交互【原创内容,转载请注明出处】
【未经授权禁止转载】【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】交互是真正意义上的“动词”,所有的文档中原创内容,盗版必究。原创内容,盗版必究。有关交互的描述都是“要干什么”“应该怎样本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net”“必须如何”,例如“字段A大于10时,【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。弹出提示语xxxx“,其中”弹出提示语“本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net就是一个交互行为。而这一整段话就是一个业本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。务逻辑,但是注意,它是一个“业务的交互逻【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】辑”,因为它是基于业务的某个前提,执行交本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。互的某个指令。
未经授权,禁止复制转载。【转载请注明来源】【未经授权禁止转载】在前端,处理交互其实是很麻烦的,因为它一【本文首发于唐霜的博客】【转载请注明来源】半具有视图层面的意义,一半具有非视图层面【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。(操作数据)的意义。因此,我们要想办法把本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net交互从中解放出来。我们需要建立交互模型,【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。它一半提供给视图层,让视图去调用它,作为【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】视图层的响应,另一半它要读取和操作数据,【本文受版权保护】【未经授权禁止转载】使得业务发生演进。
【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。另外,下面我们会讲到,视图本质上是抽象的著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】状态的具体表现,在交互模型中,我们可以提著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】前定义好作为视图抽象的状态,并且在面对某本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net个与视图有关的交互指令时,操作其状态,从【原创不易,请尊重版权】【作者:唐霜】而达到与视图层完全没关系的效果。
著作权归作者所有,禁止商业用途转载。【本文受版权保护】【作者:唐霜】视图转载请注明出处:www.tangshuang.net
未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。视图是前端最熟悉的部分,也是业务系统最无【未经授权禁止转载】【本文受版权保护】关紧要的部分,因为对于非常多的业务系统而未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】言,其核心价值在于数据,即使没有前端的界【本文首发于唐霜的博客】【本文受版权保护】面,只要你有手段让我准确获得数据,我也是著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】可以接受的。当然,如果没有前端的界面,数【作者:唐霜】【未经授权禁止转载】据的创建、补充、修订,审批的进行,文件的本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net上传,都是非常麻烦的,所以,不能因为它对转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net于业务无关紧要就直接否定它的存在。
未经授权,禁止复制转载。【作者:唐霜】转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。视图的本质是抽象的状态的具体表现,也就是【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】著名的公式ui=f(state),在业务【本文首发于唐霜的博客】【本文首发于唐霜的博客】系统中,我们需要对业务数据状态化,使“业【本文受版权保护】【作者:唐霜】务的数据+界面的状态”成为一个大状态,交本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】给视图,视图拿到这个大状态之后,按照不同【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net端的特征进行渲染,提供人机交互的入口,调【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net用交互模型的方法,响应新的大状态的变更。
【版权所有,侵权必究】【作者:唐霜】转载请注明出处:www.tangshuang.net在很多情况下,视图具有相似性,对视图进行【作者:唐霜】原创内容,盗版必究。建模,可以有效的解决此类复用问题,例如在未经授权,禁止复制转载。转载请注明出处:www.tangshuang.netPC上有一个罗列字段的列表,在APP上也原创内容,盗版必究。转载请注明出处:www.tangshuang.net有一个同样的列表,只不过它们的长相不同,【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】但是它们都是一个列表,有label和va【转载请注明来源】【关注微信公众号:wwwtangshuangnet】lue两个部分,value部分还需要进行【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net一些格式化处理,以及一些操作上的按钮。这【作者:唐霜】本文版权归作者所有,未经授权不得转载。些相同的部分,我们可以在模型(用抽象类更著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。好)中撰写,再在两端各自实现界面的呈现。
【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net
