|
List Info
Thread: Moving components configuration to the resource type API
|
|
| Moving components configuration to the
resource type API |

|
2006-04-01 20:49:52 |
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.w
ikipedia.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
|
|
| Moving components configuration to the
resource type API |

|
2006-04-03 07:21:33 |
Michael Wechner wrote:
[...]
>> 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.
What do you mean with "confused with the API"?
It would be part of the API:
Document.addReference(Document, int referenceType)
Document.removeReference(Document)
Document.getReferences()
...
[...]
>> 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
Yes - the Lenya API should support working on documents.
But a custom copier, deleter, ... would have to operate
"behind the scenes".
>> 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?
Imagine you have a JCR-based repository implementation.
Then your Copier interface might look like this:
Copier.copy(Document src, Document dest,
javax.jcr.Session session)
In a RDBMS-based implementation, it might look like this:
Copier.copy(Document src, Document dest, DBConnection
conn)
In a file system based implementation, it might look like
this:
Copier.copy(Document src, Document dest, File contentDir)
And so on.
But if you want to export the Copier interface in the API,
you have to provide a generic parameter passing mechanism,
e.g. with a ParameterObject:
Copier.copy(Documetn src, Document dest, RepoInformation
info)
That's not elegant at all.
BTW, this brings up another problem if we allow multiple
repo
implementations:
If you want to allow custom Copiers, Revisioners etc. for
different
resource types, you end up with (resource types) x (repo
impls)
implementations, e.g. a
XhtmlJcrCopier
XhtmlFilesystemCopier
...
OdtJcrCopier
OdtFilesystemCopier
...
>>>> 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.
I don't quite understand this - could you please give an
example?
>>> 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.w
ikipedia.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.
OK, let's see where this thread leads us ...
-- Andreas
--
Andreas Hartmann
Wyona Inc. - Open Source Content Management - Apache
Lenya
http://www.wyona.com
http://lenya.apache.org
andreas.hartmann wyona.com andreas apache.org
------------------------------------------------------------
---------
To unsubscribe, e-mail: dev-unsubscribe lenya.apache.org
For additional commands, e-mail: dev-help lenya.apache.org
|
|
[1-2]
|
|