幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

Lattice基于扩展点的业务叠加

  在上一篇《Lattice面向高可扩展的业务框架》中,我们介绍了如果快速定义一个业务级扩展点,并能基于这个扩展点实现业务定制的插件化。同时,在例子中,我们也给出基于业务身份做业务定制逻辑的隔离。
  在本文中,我们将进一步介绍,当一个扩展点有多个实现时,是会产生业务叠加的。业务逻辑叠加如果处理不好,往往就是代码腐化、噩梦的开始。关于业务叠加导致平台代码是如何腐化的,可以参考《一次代码腐化的演进过程》。
  在读者看完上述两篇文章后,我会在本文分两部分来介绍业务叠加:能力这个关键概念的介绍基于能力定义,实现业务叠加的样例
  能力概念介绍
  在Lattice框架里,有一个叫做能力(Ability)的名词。这里,我就用这个名词做下我的理解。
  《吕氏春秋适威》:民进则欲其赏,退则畏其罪,知其能力之不足也!
  《三峡之秋》二:长江蕴藏着无限丰富的水能;三峡形成了天然的水利枢纽。这在我国的建设事业中,有可能变成一种巨大的能力。
  毛主席在《纪念白求恩》中写道:一个人能力有大小,但只要有这点精神,就是一个高尚的人。
  领导在平台开工会中提到:一个平台能力有大有小,但只要架构优秀并持续改进,就是一个有希望的平台
  从上面的名家言论中可以看出,能力是对人、物等特定载体在某些场景下所表现出的一组行为的描述。
  打个比方,我们在谈到人这个能力载体时,我们会说:人具备改变世界的能力人具备繁衍后代的能力人具备扯淡的能力相声演员(人)具备说学逗唱的能力体育运动员(人)具备跑跳的能力。。。。。。。。。。。。。
  能力的特征
  如果我们再进一步细分,人这个载体又是由头、躯干、四肢、经血、脉络以及各种内脏组成。这些不同的部件,也可以作为一个载体提供一些更加细分、具体的能力。比如,手这个载体,虽然他不具备繁衍后代的能力。但是手的能力有:可以弯曲的能力、可以负重的能力。手弯曲的行为有手腕弯曲、手指弯曲,手的负重行为可以有以手掌方式负重、手指方式负重。手这个部件的能力以及其行为虽然很有限,但是配合起来可以完成俯卧撑,最终支撑并实现了人类繁衍更加重要能力的实现。
  所以,能力是可聚合的
  说到了能力的行为,行为应该可以扩展的,扩展后的行为可以做更多的之前做不到的事。比如挠痒这个行为。其实挺简单,基本的挠痒动作就是用手去抓嘛,能抓得到的地方就去抓好了。但对于抓不到的地方,那怎么办?你至少有两种选择:换个行为,改用蹭,找个地方对准痒处使劲蹭。。还是用挠这个行为,不过得扩展一下手,再配合使用不求人完成对痒处的挠
  所以,能力的行为是可扩展的
  刚刚提到的手的能力及其行为,都是原生的,与生俱来的。但是,我们是可以通过给人增加外挂,增加一些原本不具备的能力。比如,给眼睛配上夜视眼镜,人就具备了如猫一样可以夜视行为。夜视眼镜的载体是眼睛,对看这个行为进行了扩展,从而使人具备夜视的能力。
  所以,某些能力不一定是原生的,是可以通过工具后叠加的
  有时候,你在某个方面可能真的很牛逼。比如,你唱歌很好、舞跳得棒、乒乓球也是一把好手。可是如果你不去介绍自己、不在特定场合去表现自己,那么谁也不知道你有啥能力。
  所以,能力是一定是能被呈现的
  如果能理解上面的概念,那么在回过头来看Lattice中关于能力接口的定义。
  在Lattice中,我们定义了能力接口IAbility,如下:publicinterfaceIAbilityBusinessExtextendsIBusinessExt{StringgetCode();能力编码StringgetInstanceCode();AbilityContextgetContext();能力上下文booleansupportChecking();能否是否生效检查BusinessExtgetDefaultRealization();能力缺省默认实现能力执行器T,RRreduceExecute(ExtensionCallbackBusinessExt,Tcallback,NonnullReducerT,Rreducer);}
  IAbility能力中有两个关键的方法,一个是supportChecking。是用来检查在特定的业务约束下(bizCode),对于特定的载体,本能力是否支持?简单地打比方:看这个行为,去问手这个载体,应该得到false的结果看这个行为去问眼睛,应该得到true的结果
  另一个方法是reduceExecute(),他会根据能力上下文,去获取并执行特定的行为。比如:针对眼睛这个载体获取出EmptyEyeRealization,那么就代表没有可用行为,比如盲人针对眼睛这个载体取出的是基本实现NormalEyeRealization,那么就可以完成基本看的行为针对眼睛这个载体取出的是增强版EnhancedEyeRealization,那么就可以完成夜视行为
  基于能力定义,实现业务叠加的样例
  环境准备
  您需要:用于运行程序的IDE(集成开发环境),比如IntelliJIDEA或其类似工具;JavaDevelopmentKit(JDK),需要JDK8及以上版本完成阅读:Lattice面向高可扩展的业务框架
  版本依赖dependencygroupIdorg。hiforce。latticegroupIdlatticemodelartifactIdversion1。0。8。3versiondependencydependencygroupIdorg。hiforce。latticegroupIdlatticeruntimeartifactIdversion1。0。8。3versiondependency
  Step1:定义团购场景GroupBuyProduct产品Product(codeGroupBuyProduct。GROUPBUYPRODUCTCODE,nameGroupBuyTradeProduct)publicclassGroupBuyProductextendsProductTemplate{publicstaticfinalStringGROUPBUYPRODUCTCODElattice。productGroupBuyProduct;OverridepublicbooleanisEffect(ScenarioRequestrequest){if(requestinstanceofBuyScenarioRequest){booleaneffectStringUtils。equals(groupBuy,((BuyScenarioRequest)request)。getSource());System。out。println(GroupBuyProducteffectstatus:effect);returneffect;}returnfalse;}}
  产品定义需要用Product注解标识,同时需要继承ProductTemplate抽象类,并实现isEffect方法。团购产品的生效条件:当前的场景是买家下单场景,即ScenarioRequest是BuyScenarioRequest如果渠道来源是groupBuy,当前产品则生效
  Step2:团购产品实现自定义商品单价扩展点
  在《Lattice面向高可扩展的业务框架》,平台定义了一个自定义商品单价的扩展点。在这里,我们让团购产品去实现这个扩展点,并假定在团购平台上,商品单价打7折。如下:Realization(codesGroupBuyProduct。GROUPBUYPRODUCTCODE)publicclassGroupBuyProductExtextendsBlankOrderLinePriceExt{OverridepublicLonggetCustomUnitPrice(OrderLineorderLine){returnorderLine。getUnitPrice()7001000;onlyforsample。}}
  注:这里的价格计算只是用于DEMO,实际的价格计算不能用类型强制转换
  Step3:构造买家下单场景的请求publicclassBuyScenarioRequestimplementsScenarioRequest{GetterprivatefinalOrderLineorderLine;GetterSetterprivateStringsource;publicBuyScenarioRequest(OrderLineorderLine){this。orderLineorderLine;}OverridepublicOrderLinegetBizObject(){returnorderLine;}}
  Step4:构造一次面向买家下单场景的业务调用过程publicstaticvoiddoBusiness(Stringsource){OrderLineorderLinenewOrderLine();orderLine。setUnitPrice(1000L);orderLine。setBizCode(business。b);try{LongunitPricenewBizSessionScopeLong,OrderLine(orderLine){OverrideprotectedLongexecute()throwsLatticeRuntimeException{bla。bla。blaOrderLinePriceAbilityabilitynewOrderLinePriceAbility(orderLine);returnability。getCustomUnitPrice(orderLine);}OverridepublicBuyScenarioRequestbuildScenarioRequest(OrderLinebizObject){BuyScenarioRequestrequestnewBuyScenarioRequest(bizObject);request。setSource(source);addsomeotherinfo。returnrequest;}}。invoke();System。out。println(〔BusinessB〕overlayproductunitprice:unitPrice);}catch(LatticeRuntimeExceptionex){System。out。println(ex。getErrorMessage()。getText());}catch(Throwableex){ex。printStackTrace();}}
  一次业务调用过程,我们用BizSessionScope进行包装。原因在于:一个业务可以叠加非常多的产品;你可以想象,在电商生态中有一个AppStore,每个业务都可以从AppStore中选择并安装产品;一次业务调用,并不是业务安装的产品都会生效,比如本例中的团购产品,只有在下单渠道是groupBuy时才会生效;一次业务调用中,我们需要过滤出本次会话实际生效的产品,并将生效的产品与业务叠加后,再进行扩展点调用以及多份扩展点实现的Reduce
  所以,BizSessionScope会再被首次构造上,进行业务配置处理、生效的产品过滤、本次会话范围缓存初始化以及业务上下文初始化。
  Step5:样例演示
  我们演示两次业务调用过程:第一次业务的渠道来源是null,商品价格就是商品单价1000L第二次业务的渠道来源是groupBuy,团购平台要求商品单价必须打7折,产品的定制逻辑优先(这个一般是业务和平台产品签约时约定的)publicclassLatticeOverlayProductSample{publicstaticvoidmain(String〔〕args){Lattice。getInstance()。setSimpleMode(true);Lattice。getInstance()。start();System。out。println();doBusiness(null);System。out。println();doBusiness(groupBuy);System。out。println();}。。。。。。}
  运行结果如下:GroupBuyProducteffectstatus:false〔BusinessB〕overlayproductunitprice:1000GroupBuyProducteffectstatus:true〔BusinessB〕overlayproductunitprice:700
  我们可以看出,在团购产品生效时,自定义商品单价扩展点,返回的是团购产品的定制实现,即商品打了7折。
  本样例代码URL:https:github。comhiforcelatticesampletreemainlatticeoverlayproduct

微小说我跟俩洋妞的海岛求生故事(一)十七号那天,我正坐在一架从何蓝飞往吉龙的飞机上。由于飞机出现了故障,机长不得不迫降,然而当时除了山川便是海洋,他为了能让大家活命,不得不选择靠海的地方降落。当时飞机……原神新手玩家永冻流攻略原神:新手玩家永冻流攻略永冻流是非常适合新手的搭配,性价比很高。今天就来聊聊平民永冻流的搭配思路。1。队伍配置队伍配置主要是凯亚重云行秋芭芭拉,两冰两水,非常……散文在杂乱无章的风中,辞旧迎新一hr又是一年,短暂而漫长的一年,看似平静却风起云涌的一年。就像在昨天,忙碌一天之后,枕着夜色入眠,做了一个有春夏秋冬四季的长梦,还尝遍了苦辣酸甜盐的人生五味,一觉醒来,……生活中做到烟酒不沾,异性朋友不交的人,大多都是这几种有的人,明知抽烟有害健康,仍不愿意戒掉;明知喝醉伤害身体,仍控制不住量。有时候抽烟能让人放松自己,有时候喝酒能排遣内心孤寂。人这一生,我们会……二十四节气灸小雪艾灸艾灸养肾激活生命源动力,男女都需要今年11月22号,周二,小雪节气小雪是24节气中的第20个节气,每年阳历11月22日前后太阳到达黄经240度。历书记载:斗指己,斯时天已积阴,寒未深而雪未大,故名小雪。这……浙江金华市十大旅游景点金华小冰岛:独具北欧风光,一秒进入北欧秘境金华小冰岛,位于金华九龙村采石场,占地面积约200亩,是前几年中外合作的《极南之地》电影剧组,根据剧情所需改造搭建的淘金小镇。该……快递不快?国家邮政局回应邮政快递业加快复苏进入12月以来,邮政快递业加快复苏,迎来新一轮业务高峰。国家邮政局监测数据显示,双12当天,全国邮政、快递企业共揽收邮(快)件4。53亿件,与2021年……许家印先生怎么了?许家印怎么了恒大集团老板许家印先生还是一位很负责任的企业家,换位思考,如果许家印先生没有一颗强大的心脏,就目前恒大集团负债2万亿,就算每天还债一个亿,最少也要56年还清外债。这……阔腿裤搭配上衣好看的3个技巧,修身显瘦又有高级感阔腿裤是大家都喜爱的裤子之一,修饰腿型、遮肉显瘦的效果有目共睹。不管时尚圈怎么变化,这种经典的单品在潮流中都不会被淘汰,但是,要想把阔腿裤穿出好看与气质,还是有技巧的。这……县衙门昭化旅游之二古城最大的一条街道叫太守街,街两边多是南方风格的木架结构的店铺和客栈,红灯笼,黄挑幌高高挂起,仿古复古。街面宽4米多,一色的青石板路,都是按三横两纵铺就而成,并且中……讨论过于精准?西蒙斯大学期间的球探报告谈到其竞争心态ampa(原文发表于11月23日,作者为SportingNews网站的KyleIrving,文章内容不代表译者观点)当评估新秀的选秀前景时,每年都会在选秀大会前就有某位球员成了大……江苏中天钢铁女排去蔡化势在必行中国女排超级联赛,江苏中天钢铁女排在对阵河南女排时,不但是清一色的全华(苏)班,而且是清一色的20岁左右的青少年,江苏女排去蔡化已经十分明显。这样的变化就是人走茶凉,是中国传统……
国际足联点评梅西22年表现点亮了足球中最盛大的舞台!2023年2月11日,FIFA公布2022年世界足球先生3名候选,本泽马、梅西和姆巴佩入围。国际足联官网随后点评了梅西的表现。梅西世界杯夺冠定义了他这一年,他点亮了……万米深海沟中造地震,发现挑战者深渊俯冲板块上地幔顶部强蛇纹石文羊城晚报全媒体记者李钢通讯员李淑图南海所提供近日,中国科学院南海海洋研究所边缘海与大洋地质重点实验室(OMG)丘学林研究团队,联合中国科学院深海科学与工程研……两大神颜相遇迪丽热巴和刘亦菲谁才是内娱第一美女今年微博之夜百花齐放,美女们都争奇斗艳,美不胜收。因此话题也是层出不穷,从红毯取消,到唐嫣去哪里了,黄晓明李冰冰唇语,三小只不能同框,胡歌被挤出等等等。今日就来看看……NBA公布了本赛季(常规赛)各奖项的最有可能的归属者以下是年度最佳教练、年度最佳第六人、进步最快球员、年度最佳防守球员、年度最佳新秀,MVP奖项的目前领跑者。MVP1。尼古拉约基奇2。乔尔恩比德3。扬尼斯……迎新春丨惊艳!园博园万国灯笼会,大年初一起迎客,门票免费领取南宁园博园,春节好去处!大年初一起南宁园博园夜场将迎万国灯笼会届时万国灯笼汇聚成百米长廊、极光飘雪如梦似幻、星空幻影灯海闪耀南宁园博园。。。满园诗画震撼人心,火树银花照亮……59岁我决定来北京做了眼袋提眉手术,改变是为了自己开心以下为求美者自述:当我有了这个想要让眼周重新恢复到年轻化的状态的想法后,周围的姐妹和以往的同事,大部分人是认可我的,她们都知道我更爱漂亮。不过也有反对的声音,比如说都59……蒙特利尔温哥华自驾游攻略(六)后勤保障衣出发之前,在网上查阅了沿途各地的天气预报和在同一时期的去年天气情况,然后据此准备。内外衣服原则上是每天一套,外加防水风衣和薄防寒服。鞋子准备了登山鞋、平地……杨德龙我国经济复苏势头已经逐渐形成杨德龙立方大家谈专栏作者3月15日,沪深两市呈现出震荡反弹的走势,隔夜美股上涨,带动了市场的情绪。近期有三家美国银行先后破产,引发投资者对于美国银行业危机的担忧,这次美国……暴雪事件过后,网易又找到一棵摇钱树图片来源:好看商业作者蕴翔财经从业绩表现上看,网易已经成为一个游戏驱动的公司。但当游戏行业进入存量市场后,喝汤已是难事,吃到肉更是难上加难。一个新爆款的诞生,对于网……13个月婴儿的护理,看看要注意什么孩子满月以后,你曾经的恐惧、疲惫和不安已经慢慢再消失了。你已经适应了有这个新家庭成员的生活,而且对他的性格有了大致的了解。你的孩子已经给了你一个令人惊喜的回报第一个……小鹏汽车的焦虑与愿望绘图:杨佳在今年的财报电话会上,小鹏汽车董事长何小鹏开玩笑地说,总裁王凤英到来给他个人带来了很大压力:她一周工作七天,现在我们都开始干七天的活了。从曾经的造车新势力……FC热血新纪录,玩了20多年终于见到美国队数据,原来藏了很多这是老男孩游戏盒的第570篇原创,作者怀旧淼哥之前说《热血新纪录》是淼哥最喜欢的热血游戏,毕竟买一送五嘛,小时候玩的那叫不亦乐乎。不过因为流传度的原因,《热血新纪录》在民……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网