Return-Path: Delivered-To: apmail-lucene-java-dev-archive@www.apache.org Received: (qmail 62171 invoked from network); 4 Oct 2009 00:11:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 4 Oct 2009 00:11:28 -0000 Received: (qmail 38348 invoked by uid 500); 4 Oct 2009 00:11:27 -0000 Delivered-To: apmail-lucene-java-dev-archive@lucene.apache.org Received: (qmail 38252 invoked by uid 500); 4 Oct 2009 00:11:27 -0000 Mailing-List: contact java-dev-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@lucene.apache.org Delivered-To: mailing list java-dev@lucene.apache.org Received: (qmail 38244 invoked by uid 99); 4 Oct 2009 00:11:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Oct 2009 00:11:27 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of buschmic@gmail.com designates 72.14.220.156 as permitted sender) Received: from [72.14.220.156] (HELO fg-out-1718.google.com) (72.14.220.156) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Oct 2009 00:11:16 +0000 Received: by fg-out-1718.google.com with SMTP id d23so199277fga.5 for ; Sat, 03 Oct 2009 17:09:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=bdoLGoH7iZtGLdF0ABORmZ385Kk4fYSlg8yefjQMf20=; b=RLTyfFb6UuGd2S5Hddz5k9w+0u2Md5a/HAxvJlTPIOJKfkGYsfV1C935AoRGRRII6i C7ekNR99HfQCXux20DVtssDRzKvCPaeWHp7x5UL0oZ3hSJPGZknxW860R/zTFYlY+dUV 9DSgPDRJlv17OpfItS/yivEMIYMuYQbopFGBE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=C8fev6jAnhfgI7w0kgXbqZJNb5Wp+qs7VDZCBgIJskypeDj7zbNSTfqjMDOoBsPlCt 4P18U/wfmzG9EKqUX8sdfwQk5Nz4MXwgBhwHnyozBv04D5Idjio3Y+7NDsxseFSMaavG s4diakvofsNT4IhWIgrJC5GNGqd6eBPS72W6c= Received: by 10.86.228.3 with SMTP id a3mr3799803fgh.51.1254614996226; Sat, 03 Oct 2009 17:09:56 -0700 (PDT) Received: from michael-buschs-macbook-pro-2.local (pD952391E.dip.t-dialin.net [217.82.57.30]) by mx.google.com with ESMTPS id 4sm3076989fge.9.2009.10.03.17.09.53 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sat, 03 Oct 2009 17:09:54 -0700 (PDT) Message-ID: <4AC7E7D0.8060408@gmail.com> Date: Sun, 04 Oct 2009 02:09:52 +0200 From: Michael Busch User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.4pre) Gecko/20090915 Thunderbird/3.0b4 MIME-Version: 1.0 To: java-dev@lucene.apache.org Subject: Re: Lucene 2.9 and deprecated IR.open() methods References: <4AC684B7.2040505@gmail.com> <59b3eb370910021625r3854c09dw3c280143aed87b1a@mail.gmail.com> <59b3eb370910021645l154f1ee9p14586927b93fbbef@mail.gmail.com> <9ac0c6aa0910021715w6c67c26fwcd5b25d80d7b7217@mail.gmail.com> <4AC698E4.1050606@gmail.com> <59b3eb370910021918h797027e8qf30761dd22e8f6e5@mail.gmail.com> In-Reply-To: <59b3eb370910021918h797027e8qf30761dd22e8f6e5@mail.gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Checked: Checked by ClamAV on apache.org On 10/3/09 4:18 AM, Earwin Burrfoot wrote: > Builder pattern allows you to switch concrete implementations as you > please, taking parameters into account or not. > Besides that there's no real difference. I prefer builder, but that's just me :) > > Why can't you do that with a factory that takes a config object as parameter? Seems very similar to me... the only difference is syntax, isn't it? And if you have setter methods on the config object or methods that return "this" that you can concatenate is just personal preference, right? Personally I prefer the setter methods for our usecase, simply because there are so many config options. Maybe you don't want to set them all in the same places in your app code? E.g. in our app we have a method like applyIWConfig(IndexWriter) that, as the name says, applies all settings we have in a customizable config file. However, some IW settings are not customizable, and applied somewhere else in our code. I think with the concatenation pattern this would look less intuitive than with good old setter methods. You'd have to change applyIWConfig(IndexWriter.Builder) to return IW.Builder and do the concatenation both in the method and in the caller. But, like Mark said, maybe this is just my personal preference and for others not compelling arguments. Or maybe I'm missing some other advantage of the builder pattern? I haven't used/implemented it myself very much yet... Michael >> Thats just me though. >> >> Michael McCandless wrote: >> >>> OK, I agree, using the builder approach looks compelling! >>> >>> Though what about required settings? EG IW's builder must have >>> Directory, Analyzer. Would we pass these as up-front args to the >>> initial builder? >>> >>> And shouldn't we still specify the version up-front so we can improve >>> defaults over time without breaking back-compat? (Else, how can >>> we change defaults?) >>> >>> EG: >>> >>> IndexWriter.builder(Version.29, dir, analyzer) >>> .setRAMBufferSizeMB(128) >>> .setUseCompoundFile(false) >>> ... >>> .create() >>> >>> ? >>> >>> Mike >>> >>> On Fri, Oct 2, 2009 at 7:45 PM, Earwin Burrfoot wrote: >>> >>> >>>> On Sat, Oct 3, 2009 at 03:29, Uwe Schindler wrote: >>>> >>>> >>>>>> It is also probably a good idea to move various settings methods from >>>>>> IW to that builder and have IW immutable in regards to configuration. >>>>>> I'm speaking of the likes of setWriteLockTimeout, setRAMBufferSizeMB, >>>>>> setMergePolicy, setMergeScheduler, setSimilarity. >>>>>> >>>>>> IndexWriter.Builder iwb = IndexWriter.builder(). >>>>>> writeLockTimeout(0). >>>>>> RAMBufferSize(config.indexationBufferMB). >>>>>> maxBufferedDocs(...). >>>>>> similarity(...). >>>>>> analyzer(...); >>>>>> >>>>>> ... = iwb.build(dir1); >>>>>> ... = iwb.build(dir2); >>>>>> >>>>>> >>>>> A happy user of google-collections API :-) These builders are really cool! >>>>> >>>>> >>>> I feel myself caught in the act. >>>> >>>> There is still a couple of things bothering me. >>>> 1. Introducing a builder, we'll have a whole heap of deprecated >>>> constructors that will hang there for eternity. And then users will >>>> scream in frustration - This class has 14(!) constructors and all of >>>> them are deprecated! How on earth am I supposed to create this thing? >>>> 2. If someone creates IW with some reflectish javabeanish tools - he's >>>> busted. Not that I'm feeling compassionate for such a person. >>>> >>>> >>>> >>>>> I like Earwin's version more. A builder is very flexible, because you can >>>>> concat all your properties (like StringBuilder works with its append method >>>>> returning itself) and create the instance at the end. >>>>> >>>>> >>>> Besides (arguably) cleaner syntax, the lack of which is (arguably) a >>>> curse of many Java libraries, >>>> it also allows us to return a different concrete implementation of IW >>>> without breaking back-compat, >>>> and also to choose this concrete implementation based on settings >>>> provided. If we feel like doing it at some point. >>>> >>>> -- >>>> Kirill Zakharenko/Кирилл Захаренко (earwin@gmail.com) >>>> Home / Mobile: +7 (495) 683-567-4 / +7 (903) 5-888-423 >>>> ICQ: 104465785 >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org >>>> For additional commands, e-mail: java-dev-help@lucene.apache.org >>>> >>>> >>>> >>>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org >>> For additional commands, e-mail: java-dev-help@lucene.apache.org >>> >>> >>> >> >> -- >> - Mark >> >> http://www.lucidimagination.com >> >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org >> For additional commands, e-mail: java-dev-help@lucene.apache.org >> >> >> > > > --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org For additional commands, e-mail: java-dev-help@lucene.apache.org