+1 for modules

08.12.2020, 16:02, "Andrey Gura" <ag...@apache.org>:
> Definitely agree with Alexey. Separating API declaration from
> implementation could really improve system design and avoid coupling.
>
> About extending @IgniteExperimental annotation. It doesn't look good
> to me. We should consider any API either experimental or stable. Third
> option is deprecated API. Merging API which is known in advance that
> it is unstable is a very bad idea.
>
> On Tue, Dec 8, 2020 at 3:48 PM Nikolay Izhikov <nizhi...@apache.org> wrote:
>>  Hello, Alexey.
>>
>>  Think we can extend our @IgniteExperimental annotation.
>>
>>  `@IgniteExperimental` - mark features that are truly experimental and can 
>> be completely removed in future releases.
>>  `@NotRecommended` - mark features that widely adopted by the users but 
>> implemented wrong or have known issues that can’t be fixed.
>>  `@NotStable` - mark features supported by community but API not stable and 
>> can be reworked in the next release.
>>  `@Stable` - mark features that are completely OK and here to stay.
>>
>>  We should output notes about these annotations in the JavaDoc, also.
>>  What do you think?
>>
>>  > 8 дек. 2020 г., в 12:49, Alexey Goncharuk <alexey.goncha...@gmail.com> 
>> написал(а):
>>  >
>>  > Igniters,
>>  >
>>  > I want to tackle the topic of modules structure in Ignite 3. So far, the
>>  > modules in Ignite are mostly defined intuitively which leads to some
>>  > complications:
>>  >
>>  > - Ignite public API is separated from the rest of the code only by
>>  > package name. This leads to private classes leaking to public API which is
>>  > very hard to catch even during the review process (we missed a bunch of
>>  > such leaks for new metrics API [1] and I remember this happening for 
>> almost
>>  > every SPI)
>>  > - Classes from 'internal' packages are considered to be 'free for grabs'
>>  > in every place of the code. This leads to tight coupling and abstraction
>>  > leakage in the code. An example of such a case - an often cast of
>>  > WALPointer to FileWALPointer, so that the community decided to get rid of
>>  > the WALPointer interface altogether [2]
>>  > - Overall code complexity. Because of the lack of inter-module
>>  > interaction rules, we are free to add new methods and callbacks to any
>>  > class, which leads to duplicating entities and verbose interfaces. A good
>>  > example of this is the clear duplication of methods in
>>  > IgniteCacheOffheapManager and IgniteCacheOffheapManager.DataStore [3]
>>  >
>>  > I think we need to work out some rules that will help us define and 
>> control
>>  > both Ignite public API and module internal API which still defines a clear
>>  > contract for other modules. Some ideas:
>>  >
>>  > - Perhaps we can move all user public classed and interfaces to an
>>  > Ignite-API module which will have no dependencies on implementation
>>  > modules. This will prevent private classes from leaking to the API module.
>>  > - We need somehow define which classes from a module are exposed to
>>  > other modules, and which classes are left for module-private usage. Maybe
>>  > Java's jigsaw will help us here, but maybe we will be ok with just more
>>  > strict java access modifiers usage :) The idea here is that a module 
>> should
>>  > never touch a dependent module's private classes, ever. The exported
>>  > classes and interfaces are still free to be modified between releases, as
>>  > long as it is not a user public API.
>>  > - A module should be logically complete, thus it may be beneficial if
>>  > module name matches with the code package it provides (e.g. configuration
>>  > -> org.apache.ignite.configuration, replication ->
>>  > org.apache.ignite.replication, raft->org.apache.ignite.raft, etc)
>>  >
>>  > Any other principles/rules we can apply to make the code structure more
>>  > concise? Thoughts?
>>  >
>>  > --AG
>>  >
>>  > [1] https://issues.apache.org/jira/browse/IGNITE-12552
>>  > [2] https://issues.apache.org/jira/browse/IGNITE-13513
>>  > [3] https://issues.apache.org/jira/browse/IGNITE-13220

Reply via email to