昨天对抄书练手的两个lucene使用的例子进行了重构,利用接口设计提高了应对用户需求变化或可快速构建新的代码。今天对代码再进行了审视,又发现接口的设计并没有遵循keep it simple原则,也没有满足SRP原则,每次新的搜索类实现此接口来完成新的索引类型所有功能,而搜索功能的实现可能相同,但也得对这一代码进行重复;当有新的搜索功能需求,索引功能的实现也可能相同,也得对相同的代码进行重复。有两个不同的变化因数的不同组合可能带来代码的重复,因此有必要对代码进行再次重构。为了满足SRP和保持接口的简洁,得对此接口进行再次抽象分离。
1)设计如图1
通过两个独立接口分别来适应各自的变化,岂不是可以解决这个问题,呵呵,没有错,可以。接下来要完成昨天那个完整的功能(索引与搜索),是不是就如上图所示,采用对两个接口的同时实现(类似于C++的多重继承),那不就实现了,有道理。面对对象程序设计原则告诉我们:优先用聚合而非继承。那又该如何设计呢?为什么要这样呢?
2) 进一步的设计与优化
对外功能调用可以提供一个类作为服务类,这个类主要是两个接口的不同对象的聚合,对功能可以很好按需组合,这样就可以更好的适应新的需求变化,同时对开发人员来说,负担很轻,可以不断的基于单职接口来扩展新类完成编码,很cool。嘿嘿,目前就这么个理解,设计如图2
Iindexer接口的实现可以不断的加入新类来完成,如图所示
Isearcher接口也可以不断加入新的类来适应变化,这种设计的确有良好的特性,优于1)中所提的继承方案,这个根本原因了。今天就写到这里吧。目前的理解也就在这个水平,呵呵,下一步要进一步的学习lucene,今天的重构就到这儿吧。
先自己给个后期的学习计划:
1)学习路线:lucene实践(边学边编码),API,拿来主义,学会运用》lucene内部原理(源码定时查看,逆向工程看其UML图)》IR原理,核心算法
2)学习方法:学习,测试(编码实践),重构(知识提炼),学习,测试,重构,借用一下XP编程方法,呵呵。
分享到:
相关推荐
lucenetest.rar,lucene,全文检索,lucene例子 lucenetest.rar,lucene,全文检索,lucene例子lucenetest.rar,lucene,全文检索,lucene例子
这个“lucene入门小例子”很可能是为了帮助初学者理解并掌握Lucene的基本用法而设计的一系列示例代码。 Lucene的核心概念包括索引、文档、字段和查询。首先,你需要理解索引的概念,它类似于传统数据库中的索引,但...
lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子
java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交...
【标题】:“Lucene3 实例解析” 在深入探讨Lucene3这个主题之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文检索库,由Apache软件基金会开发,广泛应用于各种信息检索系统中,包括搜索引擎、内容管理...
Lucene常用代码详解 Lucene是一款功能强大且高效的搜索引擎,广泛应用于各种搜索应用程序中。为了更好地使用Lucene,需要了解其核心API和常用代码。本文将对Lucene部分常用代码进行详细解释,包括多字段搜索、多...
**Lucene简介** Lucene是Apache软件基金会的一个开放源代码项目,它是一...总之,“Lucene例子”是一个宝贵的教育资源,通过实践这个例子,你可以深入理解Lucene的工作原理,为构建自己的全文搜索引擎打下坚实的基础。
Lucene 是一个开源、高度可扩展的搜索引擎库,可以从 Apache Software Foundation 获取。您可以将 Lucene 用于商业和开源应用程序。Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索...
本篇将通过一个简单的入门例子,带你了解如何使用Lucene进行搜索。 首先,我们要知道Lucene的核心组件包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。在Lucene中,信息是以文档的形式存储,...
《Lucene使用代码实例之搜索文档》 Lucene是一个高性能、全文检索库,它提供了强大的文本分析和索引功能,广泛应用于搜索引擎开发和其他需要高效文本处理的场景。本篇文章主要面向初学者,通过实例详细解释如何使用...
此示例可能包含如何将这些步骤具体实现的代码,这对于学习和理解 Lucene 的工作原理非常有帮助。通过参考这个例子,开发者可以更好地掌握 Lucene 的使用,为自己的项目构建高效的全文搜索引擎。
在这个名为 "lucene 例子以及所需jar包" 的压缩文件中,包含了一个使用 Lucene 实现的完整示例,以及相关的依赖库。 首先,让我们详细了解一下 Lucene 的核心概念和功能: 1. **索引**:Lucene 的工作原理是先构建...
《Lucene-2.3.1 源代码阅读学习》 Lucene是Apache软件基金会的一个开放源码项目,它是一个高性能、全文本搜索库,为开发者提供了在Java应用程序中实现全文检索功能的基础架构。本篇文章将深入探讨Lucene 2.3.1版本...
lucene3.0 例子lucene3.0 例子 lucene3.0 例子 ,很好的学习,只有原代原,jar 包自己加上去就OK了
经典的Lucene实例代码及详细解析以及Lucene结构流程介绍 Lucene是一个功能强大且灵活的开源搜索引擎库,它提供了一个简单易用的API,允许开发者快速构建搜索应用程序。下面将对Lucene的实例代码和结构流程进行详细...
这个例子中的`cctvSearch`可能是一个包含项目源代码或配置文件的目录,可能包括了Lucene的Java库和其他必要的依赖库。确保正确地导入这些库,才能在项目中使用Lucene的功能。 接下来,我们需要创建一个`Analyzer`来...
在`sample.dw.paper.lucene`这个压缩包中,很可能包含了示例代码,用于演示如何在实际项目中集成Lucene。这些代码可能包括了索引创建、查询处理、结果展示等相关逻辑。通过学习和理解这些代码,开发者可以更好地掌握...
**Lucene检索小例子** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。这个"lucene检索小例子"程序展示了如何利用Lucene的强大功能来构建索引和执行搜索操作。Lucene的核心特性包括文本分析、...
lucene文档例子