[ 
https://issues.apache.org/jira/browse/LUCENENET-616?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shad Storhaug reassigned LUCENENET-616:
---------------------------------------

    Assignee: Shad Storhaug

> Make Collections from Lucene.Net.Support into a 1st Class Feature
> -----------------------------------------------------------------
>
>                 Key: LUCENENET-616
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-616
>             Project: Lucene.Net
>          Issue Type: Improvement
>          Components: Lucene.Net Core
>    Affects Versions: Lucene.Net 4.8.0
>            Reporter: Shad Storhaug
>            Assignee: Shad Storhaug
>            Priority: Major
>
> The collection types in {{Lucene.Net.Support}} were originally sourced to 
> support Lucene.Net itself. While they were made public, they were not 
> considered to be features that would be used by anyone except for advanced 
> users.
> However, it has become clear by user reports that some parts of Lucene's 
> design require specialized collections that don't exist in the .NET Framework 
> in order to properly function (see 
> [LUCENENET-612|https://issues.apache.org/jira/projects/LUCENENET/issues/LUCENENET-612]
>  and 
> [LUCENENET-615|https://issues.apache.org/jira/projects/LUCENENET/issues/LUCENENET-615].
>  .NET users are generally not familiar with these specialized collection 
> types and assume that when {{IDictionary<TKey, TValue>}} is required by an 
> API that using {{Dictionary<TKey, TValue>}} is their best choice. We need to 
> improve documentation and increase visibility of the specialized collection 
> types in order to help them along.
>  # The collection types should be moved to a new 
> {{Lucene.Net.Collections.Specialized}} namespace
>  # The collection types should stay in the {{Support}} folder, but be moved 
> into a {{Collections/Specialized}} subfolder. The {{Collections}} class needs 
> to be renamed to prevent a naming conflict - I suggest following the same 
> approach that was done in [ICU4N's Support 
> folder|https://github.com/NightOwl888/ICU4N/tree/master/src/ICU4N/Support], 
> by making many of them into extension methods.
>  # The collection types should be named consistently according to .NET 
> conventions, for example {{HashMap}} should be renamed {{HashDictionary}}
>  # We should ensure we have a full set of tests for each collection, and that 
> each collection is fully implemented
>  # All collections must implement the expected interfaces from 
> {{System.Collections}}, for example a generic dictionary should implement 
> {{System.Collections.Generic.IDictionary<TKey, TValue>}}
>  # The documentation for each collection should not just indicate where it 
> was grabbed from, but explain fully how it behaves and how its behavior 
> differs from other collection types
>  # APIs where it is known that specialized collections were intended to be 
> used should also be documented to indicate the choices the end user has so 
> they don't automatically assume they are constrained by the .NET framework's 
> collection types
>  # There should be a "namespace document" in 
> {{Lucene.Net.Collections.Generic}} that lists all of the collection types and 
> a summary of their behavior, so they can be comparison shopped easily
> Since these are breaking API changes, they should be done before the official 
> release of Lucene.Net 4.8.0.
> Generally speaking, collections were fully implemented and tested to prevent 
> odd bugs from creeping into Lucene.Net but it wouldn't hurt to review to 
> ensure that is the case.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to