行业新闻

重构受影响领域的设计与编码

作者:admin    来源:百度    发布时间:2012-06-25    阅读:498次

  外链工作是个辛苦活,所以我们站长朋友的辛劳不能空费,静下心来看看自己做了多少无用外链吧。发外链不是随意找一个网站,而后写几个文字,放上个链接这么简单的,我们应当要有更加全面的斟酌,控制一些外链的发布技能,让发外链的工作更加高效。

  “可是王总,我们的系统不能支持这种非实物的服务预订销售,它可能对我们原有的网站造成宏大的冲击,我们需要三个月的时间对这个业务进行全方面的评估…”

  人物先容:

  无用外链二:须要登录才干查看的外链

  王总——“宠物商店”的总经理,从美国留学后回国创建“宠物商店”网站。一路来唾手可得的成功让他养成了执拗跋扈的行事风格。

  

  用大比例构造对你的系统进行领域划分

  许多论坛版块会有我们站长友人去回帖做外链,“顶啊”、“支持楼主”、“知道了”等等这种没有任何意思的回帖到处可见,现在很多外链发布职员在这样盲目标操作,这些垃圾外链的意义就可想而知。

  Spark以商品详情页这个Use Case为例展现了以领域驱动设计的重构类图:

  领域对外(页面、AJAX、ESB调用)只裸露领域服务,其它所有范畴类都是包内自闭的,对外不可见。

  Spark —— Jack Chen的大学同窗,一家贸易软件公司的高等征询参谋。最近热衷于宣传“领域驱动设计”的最佳实际。

  Jack Chen周一一早就被高兴的王总给喊进了办公室,马上就被王总扔出来的idea吓傻了。

  外链对于一个网站如许主要,想必大家都很明白,尤其是一个愿望从搜索引擎获得流量的网站,如果你没有海量的优质内容,那么外链会成为网站获得搜索引擎亲睐的最重要指标。很多人都意识到了这一点,每天也在不停的发外链、换友链,但是你有没有想过,自己发外链的过程中做了多少无用功?

  “好吧,Spark,我否认你给推举的书无比棒,你说的也很有情理。我读了它,明确并一些概念——例如:领域宰割 、Entity、Service、Value Object…,可我对于该如何去做还是一头雾水。你能不能直接把你从重构项目中失掉的最佳实践直接分享给我呢?不然的话,周一王胖子是不会放过交不出谜底的我的!”。读完了这本书,Jack Chen感到很有播种,但又不知道怎么开始,打个电话给领域建模的先行者Spark也许真的是解决问题最快的方法。

  图1 原宠物商店UseCase汇总图

  事务配置在DomainService的invoke()方法上,即事务把持以Use Case为粒度进行节制。

  

  一、概要领域划分

  无用外链四:博客外链及独立博客评论

  在Spark的赞助下,Jack Chen胜利的脱离了窘境。当初他正在公司里踊跃推行本人的领域驱动设计框架,他们公司的网站正在以每三周一次的重构速度疾速迭代演进。他象Spark一样,成为了一个领域驱动的布道者。

  基础仓库Repository通过Infrastructure中的DAO封装了对实体的操作,如create()、update()、delete()、findById()、findList()

  这一点,是《领域驱动设计》这本书没有过多提及的内容。这个需要联合你们公司的本来技术框架用最小化改革本钱最大化收益的方式来建立领域驱动的技术框架。下面是一个可以普遍使用的领域驱动的技术框架,可以在这之上增加更多的个性元素构成你公司自己的框架。

  序幕

  就象大家所听说过的那些神奇小子创业故事一样,几只从大西洋游回的海龟找到了一个巨大的idea——在互联网上创办在线商店销售宠物。幸好的是他们找到了投资者而且发展的很不错。但是随着时间的推移,当初“完善”的技术架构跟着越来越多的装进篮子的需求后变得不堪重负。作为公司首席架构师的Jack Chen已经被这几个月“鸡毛蒜皮”的需求折磨失眠好几天啦。

  下面我们就按照这个次序来实践一下:

  三、建立技术框架

  每个宠物医院天天都只能接收一定数目的预约,从这个概念上来说,它与什物商品有相似的库存概念。可是我该怎么去表白它们呢?

 

  图2 宠物商店领域通道图

  通道图是一个对业务领域建模异常有帮助的工具,它可以同时抒发出履行序列与分片的作用。

  外链没有被收录只能起到吸引蜘蛛的作用,并不能提升网站的权重和排名。良多人一天发了数十个外链,最后可能只收录了多少个甚至一个都没有收录,那么你所做的外链简直起不到什么作用。我们在发外链的进程中必定要注意统计,哪里发的外链收录快,哪些外链不收录。这里大家可以使用“

  无用外链三:带有跳转的外链

  图3 领域驱动设计参考技术框架图

  布道

  无用外链五:论坛水贴回复

  了无生趣的Jack Chen在王总的办公室门口彷徨了N圈,仍是不勇气去迎接那一通暴风暴雨般的中英文双语版的耻辱漫骂。“也许事件是有转折的,我好象在哪里据说过有种银弹可以解决这种系统重构的问题的”。“该逝世,成都龙泉有哪些网站建设公司?,谁把Spark送给我的《领域驱动设计》垫在显示器下啦,他始终在向我布道这本书给他的名目带来的种种神奇转变,兴许我也可以尝尝它的威力”。

  银弹

  依照需求的紧迫度来重构各个领域的设计与编码

  起源:InfoQ

  增长行动表ProductExt用于存储商品的扩展信息,如预约时光段、预约医院。并为表建立逐一对应的实体Entity。

  最要命的是:我真的要把这些所有受影响的Use Case都翻出来去让它们支持虚拟物品的业务吗?我怎么可能在2个月内实现这些重构?

  评估

  

  二、找出受影响的领域与接口

  商品业务仓库ProductRepository扩大了基础仓库,客户程序可以用productId为参数,通过ProductVo.getProduct()方法取得商品具体信息的业求实现,因为业务仓库的的公然方法对外返回的都是Value Object,因而不会直接暴露Entity类型给客户程序。

  无用外链一:没有被收录的外链

  树立一个合适你们公司的领域驱动设计的技巧框架

  

  之外,在【图2】 顶用绿色标识出来的Use Case是因为增添支撑“在线预约”这种虚构商品所需要进行代码重构的局部。这部门工作假如工期比拟紧,可以优先使用模式的方法来进行代码重构,这样也可以在之后更加轻易用领域驱动设计的办法再次重构。

  “什么,这个问题说来话长?没关系,我已经在你家门口了,你同我缓缓说”,Jack Chen带着星巴克咖啡+肯德基全家桶+久久鸭脖+谄谀的笑颜呈现在Spark家门口。

  “在线预约”是个虚拟的商品,它可不需要真的需要去检货跟包装发货,如果然的那么做啦,我就太傻了。

  有些外链收录很好,但是需要登录能力查看,这种外链搜寻引擎是看不到的,对于我们网站来说也没有任何意义。有人习惯在论坛发布一篇文章,在文章的结尾加上自己的外链,自己在登录状况可以看到,但是别人或搜索引擎只能看到文章的前面一部分,后面的就看不到了。这种情况我们可以把外链放到文章的开头尽量靠前。

  商品信息需要增加“预约时间”这个属性,客户在下订单时会把它作为标识一个预约的要害因素。

  基本设施的引用,基础设施是用来承载援用非领域调用的桩,我们在应用领域驱动设计的时候往往是从一个旧的体系重构开端。这时我们不可能请求所有的业务子系统彼此调用都通过Domain Service调用,这时咱们能够通过Infrastructure精美的把调用封装在业务仓库的业务方式内。

  独立博客评论普通可以加锚文本,但是现在不带“nofollow”标签的博客评论很少了。另外,很多主流博客也有这种情况,好比网易博客等,起不到我们盼望的外链效果。

  为了支持“在线预约”这种特别的产品,它会影响到大部分的Use Case,详细列举如下:

  基础仓库的引入,基础仓库是一个形象的仓库,它封装了大批常用工具方法、业务对象性命周期保护(实体OR映射、DAO调用)、外部接口调用。可以下降业务仓库不用要的反复编码与庞杂性。业务仓库是继续基础仓库的子类。

  这个框架的各个元素基础上在 《领域驱动设计》一书中都可以找到对应的说明,但这里需要解释一下我建立这个框架的个性懂得:

  Jack Chen立刻把自己之前画的Use Case重画了一遍,然后用期望的眼神看着Spark等候着认可。“你的过错是过于重视Case或者操作者身份,领域的划分不是基于功效或角色来进行的,通常来说我们是将内聚水平较高的Use Case归到一个高低文中。尽量使得领域自闭程度较高,并占有雷同的业务语言环境。例如基于你的Use Case图,我会画出以下的领域”

  这些大家个别都已经留神到了,比方西祠和搜搜问问的外链,它们权重固然高,然而对外链都做了跳转,对于网站权重的晋升后果甚微。有些论坛也是属于这种情形,大家宣布外链的时候多注意一下。

  图4 重构后的商品详情页类图

  本文由淘宝客推广 供稿,转载请注明出处。

  找出这个需求影响的领域及对外接口

  Jack Chen即时就被威风凛凛的王总打断了,“三个月的评估?我需要在两个月内就给我上线这个新业务。我们的投资人十分认可我的idea,并要求我们立刻把这个项目上线,它可能会辅助我们提高超年的IPO价钱。你清楚吗? DO IT ASAP!”

  四、重构受影响领域的设计与编码

  GetProductService服务类通过invoke()服务方法 对外(商品详情页面)提供服务,它通调用业务仓库中的业务方法,并将接口规格化。

  “好吧,也许这个该死的王胖子是对的。我们这个将技术与业务混在一起的乱摊子也是到了该整顿收拾的时候。”喃喃自语发了半小时怨言后的Jack Chen终于恢复到畸形状态上来了,我想我应该看看我们现在是什么样子的,为了支持这个该死的“在线为宠物医院提供在线预约的服务”的需求我们需要做出哪些改变。于是Jack Chen在白板上很快的就画出了下面的Use Case图来。

  “我有一个很cool的主意,我们可以在线为宠物病院供给在线预约的服务业务。而不仅仅是卖掉它们,你晓得这象征着什么吗?这是一个年产值上百亿的市场!!!”。

  Spark听完了Jack Chen对于现状及需要的描写之后,一幅气定神闲的样子讪讪地说出“这个很简略嘛,你现在需要做的只是这样一些事情:”

  从领域的角度来看,成都网页设计,只有商品对外暴露出来的接口是会影响到各个领域,需要优先建破商品领域(ProductDomain)及读取商品信息服务接口(GetProductService)来进行重构。

  Jack Chen ——“宠物商店”的首席架构架构师,领有丰盛的软件设计与建模教训,但对新惹事物持猜忌立场。

  引子

  

 

回到顶部