You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by Apache Wiki <wi...@apache.org> on 2008/11/16 19:19:37 UTC

[Lucene-java Wiki] Update of "MakingApiConsistent" by ivanGS

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Lucene-java Wiki" for change notification.

The following page has been changed by ivanGS:
http://wiki.apache.org/jakarta-lucene/MakingApiConsistent

The comment on the change is:
Please unite to improve Lucene's API consisteny !!!

New page:
= Lucene's API in inconsistent. =
It would be great, if some people could unite to solve this problem.

== Proposed steps to achieve API consistency: ==

 * 1) Identify categories of inconsistencies and define solutions

 * 2) Identify concrete inconsistencies including their occurrences

 * 3) Examine, which components would be affected by possible refactoring

 * 4) Propose patch for refactoring

----
----

== Let's go ==

----
=== 1) Identify categories of inconsistencies and define solutions ===

==== Containers don't use Iterable<...> (or more concrete interfaces) ====
Example:
  IndexSearcher: "int maxDoc()" and "doc(int i)"

Why is it bad?
  Usage of containers must be intuitive and consistent.

Solution:
  Make use of Java's collection interfaces such as: Iterable<...>, Collection<...>

==== Public accessible fields ====
Example:
  ScoreDoc: "public float score" and "public int doc"

Why is it bad?
  People shouldn't have to memorize, which functionality is exposed by public fields, and which by public methods.

Solution:
  No public fields. Look at every serious API. There are no public fields!

==== Some methods which return values are named something() others are named getSomething() ====
Example:
  Fieldable:

  without get: Reader readerValue(), byte[] binaryValue(), String stringValue(), ...

  with get: byte[] getBinaryValue(), int getBinaryLength(), ...

Why is it bad?
  People shouldn't have to memorize, which method starts with 'get' or 'set', which without 'get' or 'set'.

Solution:
  Methods which somehow represent a property should use names such as getSomething / setSomething

  Boolean methods could use start with isSomething / setSomething

----
=== 2) Identify concrete inconsistencies including their occurrences ===

TODO

----
=== 3) Examine, which components would be affected by possible refactoring ===

TODO

----
=== 4) Propose patch for refactoring ===

TODO

----
----
former bug report, which led to creation of this wiki page: https://issues.apache.org/jira/browse/LUCENE-1439