层架构的优点如下:
1.分离开发人员的关注。由于某一层仅仅调用其相邻下一层所提供的服务,所以,只要本层的API和相邻下一层的API定义完整,开发人员在开发某一层时就可以像关注集中于这一层所用的思想、模式、技术,这样,就等同于将分工带来的生产力提高优势引入软件开发。又如买蛋糕的例子,作为超市,只要知道下层API(如何从蛋糕厂获取蛋糕)和本层需要实现的API(把蛋糕销售给客户),就可以制定自己的业务模式很策略计划了,而不必关心如何种小麦、如何磨面粉、如何做奶油、如何做蛋糕等。这样,超市只需进行商业运作,而不必进行产业运作,如此专一,必然提高业务水平。
2.无损替换。想象一下,如果某家奶牛场倒闭了,奶油加工厂也要跟着倒闭吗?当然不会,它可以迅速更换一家奶牛场,因为各个奶牛场都可以实现“提供牛奶”这项服务。再譬如,如果某天国家出台政策,要求所有奶油厂必须从审查合格的奶牛场引进原料,恰好某奶油厂的合作牛奶供应商没能通过审查,那么,只要换一家通过审查的合作就行了。而且奶油厂内部的各个环节一动不用动,因为不同的奶牛场都可以提供“供应牛奶”这个服务。而如果奶油厂自己养牛生产牛奶,一旦遇到这个政策,还得自己去有关部门进行审查,调整相应业务流程,牵一发而动全身。程序中同样的道理,最常听说的可能就是迁移数据库了。
3.降低了系统间的依赖。还是蛋糕那个例子,如果某天蛋糕厂内部换机器了,或业务流程调整了,请问顾客需要关心吗?显然不用,因为顾客只调用超市提供的服务。而超市为顾客隐藏了下面所有产业细节。如果每一个顾客买一样商品,都要了解这个商品从原料生产到成型再到销售的一系列细节,岂不累死了。换做程序中,就如表示层只管调用业务层的服务,至于业务层下还有几层?各种数据是怎么来的?怎么存的?是真实的还是捏造的?都不需要了解,这大大降低了系统各职责之间的依赖。
4.复用。例如,你可以去这个超市买东西,我也可以去这个超市买东西。蛋糕厂可以从面粉厂提取面粉,馒头厂也可以。这样,同样的层就可以为不同的上层提供服务
弊端:
1.级联修改问题。这个问题在现实中不好比喻,但在程序中相信很多朋友都明白。例如,一个人事管理系统,本来查看人员信息只能分页查看,而现在,需要增加一个功能:在分页的同时还能分部门。例如,可以查看“销售部的前50个人”,这样,为了这个功能所有层都需要修改。
2.性能问题。本来直来直去的操作,现在要层层传递,势必造成性能的下降。就如在购买蛋糕的例子中。顾客在享受分工带来的便利时,也要承受由于不同层的部门分布各地而造成的蛋糕价格上升,这是因为分层增加了成本,如运输、不同层间部门的协调管理成本等。
纵观以上分析,分层架构有利有弊。这是一定得,世上任何事物都有利弊,所以,把“分层架构捧上天”和“一棍子打死”这两种做法都是不明智也是不科学的。对待分层架构,我们的态度应当是明晰其本质和利弊,然后根绝具体情况做出理性的分析和抉择。
从上面的分析可以看出,分层架构可以降低层内变化的成本,而对于API的变化非常敏感。如在级联修改中提到的“在分页的同时还能分部门”的新需求,就是对API进行的变动。API的变动对于分层架构是致命的,修改起来难度非常大。所以,一个简单的判断法则就是:如果您的系统层内频繁变动(甚至整层替换)可能性很大,而API变动可能性很小,就使用分层;而如果API可能会频繁变动,那就要谨慎使用分层架构了。
企业采用差异化营销策略,可以使顾客的不同需求得到更好的满足,也使每个子市场的销售潜力得到最大限度的挖掘,从而有利于扩大企业的市场占有率。同时也大大降低了经营风险,一个子市场的失败,不会导致整个企业陷入困境。差异化营销策略大大提高了企业的竞争能力,企业树立的几个品牌,可以大大提高消费者对企业产品的信赖感和购买率。多样化的广告,多渠道的分销,多种市场调研费用,管理费用等,都是限制小企业进入的壁垒,所以,对于雄厚财力、强大技术、拥有高质量的产品的企业,差异化营销是良好的选择。
同时,差异化有有自身的局限性,最大的缺点就是营销成本过高,生产一般为小批量,使单位产品的成本相对上升,不具经济性。另外,市场调研、销售分析、促销计划、渠道建立、广告宣传、物流配送等许多方面的成本都无疑会大幅度的增加。这也是为什么很多企业做差异化营销,市场占有率扩大了,销量增加了,利润却降低了的原因所在。