代码的再重构,lucene例子的再提炼

      昨天对抄书练手的两个lucene使用的例子进行了重构,利用接口设计提高了应对用户需求变化或可快速构建新的代码。今天对代码再进行了审视,又发现接口的设计并没有遵循keep it simple原则,也没有满足SRP原则,每次新的搜索类实现此接口来完成新的索引类型所有功能,而搜索功能的实现可能相同,但也得对这一代码进行重复;当有新的搜索功能需求,索引功能的实现也可能相同,也得对相同的代码进行重复。有两个不同的变化因数的不同组合可能带来代码的重复,因此有必要对代码进行再次重构。为了满足SRP和保持接口的简洁,得对此接口进行再次抽象分离。

       1)设计如图1

利用两个独立职责的接口来完成

 

      通过两个独立接口分别来适应各自的变化,岂不是可以解决这个问题,呵呵,没有错,可以。接下来要完成昨天那个完整的功能(索引与搜索),是不是就如上图所示,采用对两个接口的同时实现(类似于C++的多重继承),那不就实现了,有道理。面对对象程序设计原则告诉我们:优先用聚合而非继承。那又该如何设计呢?为什么要这样呢?

        2) 进一步的设计与优化

       对外功能调用可以提供一个类作为服务类,这个类主要是两个接口的不同对象的聚合,对功能可以很好按需组合,这样就可以更好的适应新的需求变化,同时对开发人员来说,负担很轻,可以不断的基于单职接口来扩展新类完成编码,很cool。嘿嘿,目前就这么个理解,设计如图2

聚合

 

    Iindexer接口的实现可以不断的加入新类来完成,如图所示

基于接口的多态

 

 Isearcher接口也可以不断加入新的类来适应变化,这种设计的确有良好的特性,优于1)中所提的继承方案,这个根本原因了。今天就写到这里吧。目前的理解也就在这个水平,呵呵,下一步要进一步的学习lucene,今天的重构就到这儿吧。

    先自己给个后期的学习计划:

       1)学习路线:lucene实践(边学边编码),API,拿来主义,学会运用》lucene内部原理(源码定时查看,逆向工程看其UML图)》IR原理,核心算法

       2)学习方法:学习,测试(编码实践),重构(知识提炼),学习,测试,重构,借用一下XP编程方法,呵呵。

   

       

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值