lenya-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Wechner <michael.wech...@wyona.com>
Subject Re: [Proposal] Moving components configuration to the resource type API
Date Sat, 01 Apr 2006 20:49:52 GMT
Andreas Hartmann wrote:

> Michael Wechner wrote:
>
>> Andreas Hartmann wrote:
>>
>>> Michael Wechner wrote:
>>>
>>> [...]
>>>
>>>>>> which I think should apply for all "components" working on resource
>>>>>> types:
>>>>>> Creator
>>>>>> Editor
>>>>>> Indexer
>>>>>> Publisher
>>>>>> LinkRewriter
>>>>>> ....
>>>>>>   
>>>>>
>>>>>
>>>>>
>>>>> If we allow this, we would also need a resource-type specific Mover,
>>>>> Copier, Deleter, Deactivator, Revisioner, ...
>>>>>
>>>>
>>>> similar to the source interface ;-)
>>>
>>>
>>>
>>> It's not really similar. The source interface is a single entry point
>>> to access resources using a protocol. There are no cross-connections
>>> if you use the concept consequently (i.e., always use the protocol and
>>> therefore the source implementation to access these resources)
>>>
>>> The components mentioned by Josias have multiple cross-connections.
>>> Providing a specific implementation for one of them requires to
>>> provide implementations for the others as well.
>>
>>
>>
>> I don't fully understand. Can you give an example?
>
>
> Imagine a resource type which uses a binary source and an XML source
> for a document.
>
> If you allow this, you have to
>
> - implement a Copier which copies these two files
> - implement a Revisioner which backs up / restores these two files
> - implement a Deleter which deletes these two files
> - ...


right

>
> If you use two Lenya documents, and use the (not yet existing)
> reference mechanism to link from the primary document to the
> secondary document, the internal Copier, Revisioner, and Deleter
> components will be able to handle this just by following the
> references if this is desired.


which I would consider a very helpful implementation, but it shouldn't
be confused with the API.


> You could maybe compare this with
> the onParentVersion functionality of JCR.
>
> [...]
>
>>>>> But if we allow that a document may be "anything", and only the 
>>>>> resource
>>>>> type knows what it is, the complexity seems to grow quite a lot (of
>>>>> course the flexibility would increase, too). It might also lead to
>>>>> duplication of knowledge if each resource type has e.g. its own
>>>>> publisher. 
>>>>
>>>>
>>>>
>>>> you can always provide default implementations
>>>
>>>
>>>
>>> But that doesn't reduce the complexity.
>>
>>
>>
>> I think it does. In probably most cases you don't have to implement 
>> it yourself
>> but pick an existing one
>
>
> I didn't mean the complexity of a single implementation, but
> the complexity of the API (I'm not sure what Josias meant).
>
> The more implementation options you want to give to the integrator,
> the more difficult it will be to design a comprehensible and
> maintainable framework.


it's not that complex. We already have everything, but we need to
abstractize it just as JCR is an API working on nodes and properties
instead working on directories and files ;-)

>
> Another issue is the communication between components. You have
> to find a "least common denominator" to design interfaces. If
> you want to allow polymorphism for a family of components which
> operate on the same data, you're likely to end up with the
> MagicContainer antipattern (see the Creator interface). And IMO
> a ParameterObject should not be used fo inter-component
> communication.
>

can you give an example here as well?

>
>>> If implementing a custom
>>> resource type means to implement all these mentioned components,
>>> it means to virtually implement a document management system for
>>> each advanced and complex resource type.
>>
>>
>>
>> yes, but what is the alternative?
>
>
> IMO the reference concept is sufficient to fulfil the requirements
> mentioned until now.


maybe it is, maybe it's not. My experience tells me that everytime one
thinks one has now covered all usecases, a new usecase pops up.

Off Topic: for instance I think the 1-to-1 mapping of "lenya meta files" 
is not
sufficient as it is today, because for instance the usecase of dynamic 
URLs, e.g.
the timestamp, or proxy requests are not covered, but can only be covered by
allowing more general patters after the 1-to-1 mapping.

>
>> And as said above I don't think that's a problem
>> because of the argument above. Also one can offer tools to simplify 
>> the process, just as
>> for instance there are tools to create XML Schemas, etc.
>
>
> Well, IMO the major problem is that it is much harder to achieve
> stability and backwards compatibility when the API becomes more
> complex.


as said, I don't think it's more complex, but less specific, whereas
in most problems maybe one specific implementation can be used.

I understand the difficulty to abstractize, because it took me for 
instance a long
time to understand how specific polynomials can form a vector space:

http://en.wikipedia.org/wiki/Examples_of_vector_spaces
http://en.wikipedia.org/wiki/Vector_space

but recognizing it in the end will solve a lot of problems very quickly.

And I think recognizing the generic API and providing implementations 
(as the by you mentioned reference implementation) will make things very 
simple in the end.

Michi

>
> -- Andreas
>
>


-- 
Michael Wechner
Wyona      -   Open Source Content Management   -    Apache Lenya
http://www.wyona.com                      http://lenya.apache.org
michael.wechner@wyona.com                        michi@apache.org
+41 44 272 91 61


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org


Mime
View raw message