Re: an outsiders view

"Wim Niemans" <[email protected]> Mon, 19 Dec 2005 16:19:49 +0100
Newsgroups gmane.comp.lib.binarycloud.devel
Organization Pb Solo
Message-ID <43A6DDA5.4171.1530A8E@localhost>
I am repeating my message here, since devlist persists in 'shrubbing' my emails as 
'attachments'.

>one could do: 
>$related_node = $this->getRelatedNode('../someid'); 

Wim, do you have any input here? 

Well, yes. I could have something to say. 

As we discussed, Bas, I've got a version of Node where all  redundant code is removed: 
Caching, Navigating, Creating. 

-: I deleted Caching since it is a bare copy of Smarty Caching. 

-: I've developed a NodeFactory to encapsulate the tree creating  process. Nodes are 
created using a NodeCreator Object. 

-: Nodes are equipped now with a 'pivot', meaning that all  referencing to an UpperNode 
or a Sibling goes through it's Pivot. 
This frees Nodes from traversing, since the pivot is 'visiting' a  Node on preOrder and 
postOrder traversal. Yes, it works clean and  efficient. 

-: To locate a Node in the tree, I don't think one should use the  naming ID's, since BC 
creates a Top node everywhere with the same  name. Alternatives are position (in the 
tree, horizontally) and  level (in the tree, vertically). However the need to do something  
like that is merely a symptom of bad design. 

-: I came to the conclusion that a Node belongs to a Tree and  points to its Top (I'm 
naming that a 'trunk'), and has some  important anchestor (like form and its inputs). It's 
amazing how  clean and easy the code can find them using the className or  attached 
Interface (I am using Interfaces): isInstanceOf. 

-: Well, the proposed methode of locating a Node using a  slashed_path could be easily 
added to the pivot concept. Must  evaluate that. :-] 

To disclose some more on my private efforts: 

-/ I didn't cope with translation, yet. It seems to me that using  Flexy rather than Smarty 
will do the job, without extending the  code or caching zillion translation files. 

-/ I stuck with Phing, which runs pretty smooth under PHP5. I do  think Phing is 
indispensable. I've introduced a three level  nameSpaceSystem: farm --> crop --> work. 

-/ I've redone the 'project' into an Application Tree. I'm  supporting now plain Static, 
traditional BC, MVC, ActionFacade,  AJAX, Hamlet and Portal. These applicationtypes 
can be mixed  freely and may process in parallel. I'm calling this the Staging. 

-/ I've always had my own 'conf', but it's a component of a  Mapping system: plain Map, 
Object Map, Parameter Map, Tensor Map,  Context Map. So, Children in Node is an 
ObjectMap and Conf is a  TensorMap. Parameters, Definition etc. are straight 
parameter  maps. Mapping is eliminating all those messy isset statements  everywhere. 

In order to comment on the outsiders view: 

-- I think having conf as a main component of any Node is right. 
I've implemented that in my NodeConstructorObject. It adds the  feature of 
'configurable' nodes. 

-- To integrate conf and params is however wrong. There is a  conceptual difference 
between conf and params. Whilst there are  preferences as well, needing a whole 
different interface. 

-- The event system is oke, but lacks registering and calling  runtime Objects. This 
comes into play when accessing Event from  already created Nodes. As said, the 
navigation into the Tree is a  separated class. It means also, that the Node itself *only*  
contains hooks for 'Input', 'Processing' and 'Output'. The  'Hierarchy is the Tree, and it's 
an elegant copy of HIPO,  introduced by IBM in the (19)seventies. 

-- Since BCNode has a 'preInput' and 'postInput' method, several  surrounding methods 
of 'Process' and 'Output', well, honestly,  they can *and* must be replaced by an Event 
like 'onTreeInput',  'onTreeProcess' etc. Node may register to Event for these events  
and process when fired. 

-- Example: I've defined an AccessDenied Event in Rbac. Several  Nodes listen to this 
and do something on firing. Works elegant. 
No need to bail with an errormessage or such. 

Actually, there is so much more to exploit in this type of  framework. It's a pity that some 
key people fled the team with  priorities that do not match the key-purpose of the 
framework. 
To me, personally, their reasons to abandon BC have to do with  fatigue and the need 
for quick results. Off course, their new  home is trendy, exciting and thrilling. However, 
the innovating  thinking was already done at Rails. I compare the enthousiastic  stories 
about Rails with the ones emitted when Alfa-four and/or  C-scape hit the streets. You 
may think 'alfa-what'? Exactly. It's  gone. 
FYI: My very personal feeling is that Rails compares to  professional frameworks as 
DBASEIV does to Oracle. A matter of  taste. 

Enough said about the 'empty' mindSpace. Thoughts as Nathan  expressed are truly 
proof of concept. I agree with quite a lot of  them. Also because they came on my mind 
as well :-) and some of  them are worked out already. See my roadMap: 

-] Currently I'm working on the entity concept and shortly  (thanks, Jason), I've got an 
Eureka feeling about that. 

-] Creole and Jargon are installed in my version, but my system  is still clashing with 
Propel. Entities can be build with an IOC  container, which resembles a NodeTree (well, 
not really, but the  code does). There is a strong relation with the propel-schema in  
XML, the Form-node and CRUD forms (compare scaffolding). In fact  one may 
distinguish the physical database, the scheme describing  it and the FormNodes using 
it. It's just a matter of which comes  first. I think I can build a system utilizing one of 
them at  will, in order to generate the other ones. This in effect means  the availability of 
an iterative system for developing. 

-] Such thing is done before, and is still available in legacy  environments. 

-] IOC: Inversion of Control; see picoContainer. 

Anyway, a lot of things to explore further. For the moment I'm  doing that in a lone 
environment. Don't know if contributing will  get it faster ahead.  
My project is called Okklusion and consists of a few independent  components (some 
prefer saying 'packages'). It's my intention to  go commercial, and/or using a Creative 
Commons License. 

Cheers, 
wim niemans 


_______________________________________________
dev mailing list
dev-PnctHDZWAvB/Cz2I37pSEPZ4XP/[email protected]
http://lists.binarycloud.com/mailman/listinfo/dev