Ok so its seems like you like the proposal_v3 so far (just minor
naming changes etc). I will commit it then and try to improve the
javadocs a bit etc..
Thx for the review..

Bye,
Norman


2010/8/20 Eric Charles <e...@apache.org>:
> Hi All,
> Comments inside.
> Tks,
> Eric
>
> On 08/20/2010 04:53 PM, Tim-Christian Mundt wrote:
>>
>> Hi guys,
>>
>> I began looking into the API stuff. I'd like to simplify the Mapper
>> hierarchy, which however will have no direct impact on the API. Will
>> upload a patch tomorrow.
>>
> Will look at it :)
>>
>> I agree, we should name the interface MessageManager, that's what I
>> thought.
>
> +1
>>
>> The "proposal_v3" is reasonable, I think. To make it clearer, we should
>> maybe call "AbstractStoreMessageManager" "StoreMessageManager" and
>> qualify "StoreMessageManager" to "MapperStoreMessageManager". I think,
>> that's what Eric also proposed.
>>
> Sounds good
> (loosely proposal : MappingStoreMessageManager instead of
> MapperStoreMessageManager :)
>>
>> Concerning composition: I think the composition part in the Store stuff
>> is the mappers which get plugged into the Managers. The only reason so
>> far for extending Store*Manager is the creation of certain objects.
>> Nonetheless, you are right, Eric, there are quite extensive hierarchies
>> in James and maybe we can simplify them. However, inheritance here is
>> not used to change behavior but to model different stages of abstraction
>> which is not the matter of composition. Where/How do you think we should
>> introduce composition?
>
> I'm talking about composition in the sense of the Gof "Strategy" pattern.
> I think we can say that "James has different store strategies".
> I also can be in line with you when you say the behaviour is not really
> changed (we always talk about "storing" stuff).
> However, fine-grained behaviour is quite different depending on the store
> (jpa/jcr/file/nosql such as cassandra).
> Another argument for composition in that underlying api can change without
> disturbing the existing 3rd party store impl (think what will happen if you
> rename a method in the abstract class). The enormeous advantage of
> composition is that the interface of the composed class is the published
> contract and should not change (between minor releases). So you can change
> anything in the abstract without breaking 3rd party implementations.
>
> But I'd better take my IDE and to create a patch with a composed API....
> However, I've got a number of waiting JIRAs, and if you don't see anything
> from me soon, let's not wait to implement this refactoring in the
> inheritance way.
> We can also come on this later on if appropriate.
>
>> Regards
>> Tim
>>
>>
>> Am Freitag, den 20.08.2010, 14:17 +0200 schrieb Eric Charles:
>>>
>>> Hi Norman,
>>>
>>> The following hierarchy is obvious and gives services such as create,
>>> login, logout, search on *mailboxes*:
>>>
>>>       MailboxManager (interface)
>>>            /|\
>>>             |
>>>       DelegatingMailboxManagerimpl (abstract)
>>>            /|\
>>>              |
>>>       StoreMailboxManager (abstract)
>>>            /|\
>>>              |
>>>       JPA/JCR/Maildir/...MailboxManager (concrete)
>>>
>>> This one gives services to append, set flags', expunge on *messages*:
>>>
>>>       Mailbox (interface)
>>>           /|\
>>>             |
>>>       AbstractStoreMessageManager<Id>  (abstract)
>>>           /|\
>>>             |
>>>       StoreMessageManager<Id>  (abstract)
>>>            /|\
>>>              |
>>>       JPA/JCR/Maildir/...MessageManager (concrete)
>>>
>>> Wouldn't that Mailbox interface finally be named MessageManager ?
>>> But np for me to live with the existing names.
>>>
>>> Will StoreMessageManager remain abstract (it is in the patch) ? (if yes,
>>> we will end up with a AbstractStoreMessageManager and a
>>> StoreMessageManager, both abstract,...).
>>> I suppose the criteria to implement in AbstractStoreMessageManager was
>>> 'no need for messageMapper'. Is there a common characteristic to these
>>> methods (so we can QualifyStoreMessageManager) ?
>>>
>>> If I understand well, store implementors could reuse or simply override
>>> methods of *StoreMessageManager.
>>>
>>> I was also talking about composition, so a store implementator would
>>> know directly which methods he should implement to take control on a
>>> certain behaviour aspect.
>>> With the inheritance mecanism, the implementator has to go "deep" in the
>>> class hierarchy to know it.
>>>
>>> Would you rename Document to Message in IMAP-202 ?
>>>
>>> (btw, in my first reply, I confused somewhere ...Mapper with ...Manager,
>>> sorry)
>>>
>>> Tks,
>>>
>>> Eric
>>>
>>>
>>> On 20/08/2010 12:07, Norman Maurer wrote:
>>>>
>>>> Comments inline..
>>>>
>>>>
>>>> 2010/8/20 Eric Charles<e...@apache.org>:
>>>>>
>>>>>   OK
>>>>> So AbstractStoreMessageManager doesn't implement MessageMapper (and it
>>>>> was
>>>>> in your javadoc :)
>>>>> ... and implements Mailbox (the org.apache.james.imap.mailbox.Mailbox,
>>>>> not
>>>>> the org.apache.james.imap.store.mail.model.Mailbox...)
>>>>>
>>>> yep ..
>>>>
>>>>> The org.apache.james.imap.mailbox.Mailbox has much too do with
>>>>> MaiboxSession
>>>>> and not with domain classes, so it respects your goal.
>>>>> Maybe the domain independence could be also documented in the javadoc.
>>>>>
>>>> Fair enough..
>>>>
>>>>> Talking about domain model, I'm sometimes a bit confused. We have a
>>>>> nice
>>>>> package org.apache.james.imap.store.mail.model that contains the model,
>>>>> but
>>>>> my 2-cents:
>>>>> - There are a few utils classes (PropertyBuilder,...) that could be
>>>>> moved
>>>>> somewhere else.
>>>>
>>>> I see no value here..
>>>>
>>>>> - Document could be renamed to Message (I think we talked about it some
>>>>> time
>>>>> ago)
>>>>
>>>> +1
>>>>
>>>>> - When you read code, Mailbox,... is sometimes confusing because it
>>>>> exists
>>>>> somewhere else, for example in org.apache.james.imap.mailbox.Mailbox.
>>>>> This
>>>>> last one has more to do with "service" than with "domain". I don't have
>>>>> a
>>>>> good name right now, but Maiboxable seems the closer to what I'm
>>>>> looking
>>>>> for.
>>>>>
>>>> Thats why its still called Mailbox ;)
>>>>
>>>>> Hope I'm not too niggling,
>>>>>
>>>>> Tks,
>>>>>
>>>>> Eric
>>>>>
>>>>>
>>>>> On 20/08/2010 07:36, Norman Maurer wrote:
>>>>>>
>>>>>> Let me try to explain it....
>>>>>>
>>>>>> The idea is to let the MessageMapper untouched, because its API is
>>>>>> really easy to understand and use. Its not the most Performant todo
>>>>>> but thats the price to pay.
>>>>>>
>>>>>> So I introduced a new abstract class which can be used if you want to
>>>>>> write a custom store which is not forced to use a MessageMapper and so
>>>>>> is a good fit for other implementations which not works so well with
>>>>>> the Domain model and lazy loading (nosql for example).
>>>>>>
>>>>>> Hope this explains it...
>>>>>>
>>>>>> Thx
>>>>>> Norman
>>>>>>
>>>>>> 2010/8/20, Eric Charles<e...@apache.org>:
>>>>>>>
>>>>>>> Hi Norman,
>>>>>>>
>>>>>>> I applied the last uploaded file (proposal_v3.diff):
>>>>>>>
>>>>>>> - patch works, which is good :)
>>>>>>>
>>>>>>> - I don't see any change on MessageMapper. Probably the modif to
>>>>>>> return
>>>>>>> only uid was already committed (IMAP-203,...) ?
>>>>>>>
>>>>>>> - You migrated methods from StoreMessageManager to
>>>>>>> AbstractMessageMapper. So now, I'm a bit confused about the class
>>>>>>> "responsiblity". Could you summary us the "roles/responsibilities" of
>>>>>>> these 2 classes. That will help to define which methods goes where...
>>>>>>>
>>>>>>> - Abstract/extend is widely used in james. I sometimes force myself
>>>>>>> to
>>>>>>> thin to "favor composition over inheritance". Did you consider
>>>>>>> composition instead of AbstractMessageMapper ? (maybe stupid question
>>>>>>> and I should have tried to implement before asking... :) Of course,
>>>>>>> you
>>>>>>> can find plenty of discussions and explanations
>>>>>>> (http://www.google.com/search?q=favor+composition+over+inheritance)
>>>>>>> on
>>>>>>> the net
>>>>>>>
>>>>>>> - I like the new UpdatedFlag class. When you read it, you understand
>>>>>>> what it is aimed for. Separating "data domain" from "service domain"
>>>>>>> is
>>>>>>> always good.
>>>>>>>
>>>>>>> Tks,
>>>>>>>
>>>>>>> Eric
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 08/19/2010 12:20 PM, Norman Maurer wrote:
>>>>>>>>
>>>>>>>> Hi there,
>>>>>>>>
>>>>>>>> I' currently looking for ways to make it easier to create high
>>>>>>>> performant Mailbox implementations while reusing the store api. I
>>>>>>>> think there are some things we should change to allow this.
>>>>>>>>
>>>>>>>> * We should return only the uid of the message if nothing more is
>>>>>>>> needed
>>>>>>>> * We should move some stuff to an abstract MessageMapper
>>>>>>>> implementation to make it easier to override and handle it different
>>>>>>>> and still be able to use the store api.
>>>>>>>>
>>>>>>>> For this I opened a jira and attached a patch whic hshows the idea..
>>>>>>>> I'm still not 100% sure if its really a good idea, so feedback is
>>>>>>>> welcome :)
>>>>>>>>
>>>>>>>> https://issues.apache.org/jira/browse/IMAP-202
>>>>>>>>
>>>>>>>> Bye,
>>>>>>>> Norman
>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>>
>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>>
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>>
>>>>>
>>>> Bye,
>>>> Norman
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
>> For additional commands, e-mail: server-dev-h...@james.apache.org
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to