Am Mi, den 14.04.2004 schrieb Unico Hommes um 12:09:
> From: Stephan Michels [mailto:[EMAIL PROTECTED]
> > The Repository IFs seems be more helper classes than components. And I
> > think we should using the Source objects instead to reflect 
> > all aspects
> > like locking, property handling etc.
> > 
> 
> Oh no no no please! Stacking up interface upon interface is NOT 
> a nice design at all IMHO. I REALLY don't like this. In fact I tend 
> to think that a Source should be just the Source interface itself. All 
> additional funtionality should come in the form of helper classes, 
> again IMHO.

In my mind the Source is nothing more than a peer to connect some kind
of business entity: a file in the FS, or an entry in a DB. All easly to
lookup via a unique URI. The scheme define the realm and select the
implementation. If you try to see the world from the other side, in a
more repository centric way, then you will come more to an API like
Slide. Which implements for every "aspects" a components. This design is
not bad, quite the contrary, I like it. But the problem is that it is
not very OOP. 
I try to elaborate this... For example you must create a heavywight
object like a connection, e.g. WebdavResource. Then you must pass this
object to every method call of the "stateless" components, or create
new ones for every call.

Content aspect:
void save(String path, String content) {
  Connection c = lookup(path).
  c.save(content);
}
Property aspect:
void setProperty(String path, String name, String value) {
  Component c = lookup(path);
  c.setProperty(name, value);
}

On the other side

MyRealmSource:
  Connection c;
  MyRealmSource(String path) { 
     c = lookup(c);
  }

  save() and setProperty() etc.
}

So, you can store all state information into your peer. With a simple
resolver.resolve("webdav://localhost:8888/webdav/files/index.txt");
you can get access to the correct implementation and a unique business
entity.

So you can say that "if you add all aspects for your source, you will
get a huge one". But as far as I can see is that I don't need much
aspects. The current webdav methods are: 

GET PROPFIND HEAD LOCK UNLOCK OPTIONS PUT MKCOL POST COPY MOVE
DELETE PROPPATCH REPORT SUBSCRIBE UNSUBSCRIBE
POLL EVENT TRANSACTION ACL SEARCH VERSION-CONTROL 
CHECKIN CHECKOUT UNCHECKOUT MKWORKSPACE LABEL UPDATE
BIND UNBIND REBIND

Which should be enough to do most things, which will be needed.

> > My proposal is to drop the Slide Source, but leave the Slide server as
> > option, and using the Slide block in the same sense as the 
> > hsqldb block.
> 
> I don't understand your rationale. The Slide Source is there, it may have it's 
> uses in some scenarios. Why throw away something that is working perfectly 
> well?

I don't intend to throw away any code. I only question the place of
the Slide Source. I wasn't aware that people use it.

> > So that we can use Slide as WebDAV server for our WebDAV examples.
> 
> I have been thinking about making the WebDAV samples work with 
> Slide as WebDAV server as well. But throwing out SlideSource is 
> no prerequisite for that.

No, it isn't. What I really want to see is some kind of admin tool for
a webdav server. Browsing through the files, see different versions,
changing properties etc.

Stephan.

Reply via email to