I wrote some text about the meeting. Please review, and I'll add it to
the site.

2005-07-21

Present: Nico, Ernst, Pierre, Michiel

During this meeting we mainly talked about how things work. 


datatypes? 
-----------------------
The start-point for such a discussion must be the 11 mmbase types we have right 
now. Pierre is going to
make those only relevant for the storage layer, because the complete thing is 
generalized to a 'data
type', which could also be used more generally. 'getType' of Field would become 
a bit odd, because
there appeared a 'getDataType' which would simply imply one of these 11 types.

The original design as mirrored in 'fieldtypedefinition.xml' did not anticipate 
more 'data types'
besides the 11 ones supported by mmbase, and which are also visible in the 
several specialized
methods in Node (set<type>Value and get<type>Value and in the methods of 
'Casting'. Only
'specializations' on those were anticipated, which would not be fully fledges 
types in themselves,
because the actual data types are fixed, so those could only deal with 
processors and later also
constraint specializations. 'getType' of Field would still make sense, because 
that would indicate
the actual (data) type. Michiel was still trying to defend this.


interfaces?
-----------------------


Field/CoreField
----------------
After some exchange of thoughts, we agreed that it may be simpler to drop a few 
of the new
interfaces and come to a design like this:


  [org.mmbase.bridge.Descriptor] -->
  [org.mmbase.bridge.Field] --> org.mmbase.core.CoreField  
                            --> org.mmbase.bridge.implementation BasicField 

(btw a descriptor (new in 1.8) does not describe but _is described_, we may 
need a better name here,
suggestions?)


So, no 'CoreField' interface, and only one 'field' interface altogether. We are 
taking the risque
that the dreaded 'UnssupportedOperationException' should have to be thrown in 
certain members of
core or bridge. This stuff seems intrinsic for java (e.g. if you have 'List' 
you also are not sure
that every method is indeed useable....).

For example what should Field#getNodeManager do? For 'CoreField' it could 
perhaps only throw an
exception now. Perhaps when there is also a core implmentation for NodeManager 
it could then be
fixed. What should CoreNodeManager#getCloud() do then? and 
CoreNodeManager#getCloud()#getUser()?

Hopefully we will be able to avoid all unsupported operations if e.g. we define 
the 'coreuser' object
or so. This is though outside the scope of this project which only is about 
field types (or more
generally 'data types' now).

Btw, we'll end up with dependencies like this:
org.mmbase.bridge.implementation implements org.mmbase.bridge wraps 
org.mmbase.core
org.mmbase.core implements org.mmbase.bridge

which could still be interpreted as 'circular' perhaps, because the package 
structure suggests that
'brige.implementation' is a part of 'bridge', while it uses 'core',
which in turn implemets bridge.. I think that actually it would perhaps
have been better to place the implementations next to the interfaces
rather then 'under' their package.



DataTypes
---------
'datatypes' would probably receive there own top-level package like 
'org.mmbase.datatypes', and
there is no need for interfaces here. These things are straight-forward 
containers, for which
alternative implementaitons are are not anticipated or necessary. Of course 
this does not take away
that they could be extended and plugable.


Michiel

 

-- 
Michiel Meeuwissen                  mihxil'
Peperbus 111 MediaPark H'sum          [] ()
+31 (0)35 6772979         nl_NL eo_XX en_US



_______________________________________________
Developers mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/developers

Reply via email to