Print

Print


Hello all,

A question on MVC-like architecture for EmeraldView, the Greenstone PHP 
frontend I'm working on.  First, a crash-course in the Greenstone data 
model...

The biggest unit of content in Greenstone is the "collection."  Within 
each collection, G references content in "documents" which are broken 
into "sections."  Each document and section (I've taken to calling them 
nodes) is represented in a datastore by a record with metadata.  So for 
example, represented in YAML:

DOC123:
   Title: "Pigs in space"
   Subject: "pigs, space"
   Contains: DOC123.1,DOC123.2
DOC123.1:
   Title: "The mission begins"
   Contains: DOC123.1.1
DOC123.1.1:
   Title: "More of the mission beginning"
DOC123.2:
   Title: "The mission continues"

Browse trees can be created on arbitrary metadata fields, and are called 
"classifiers."  They also consist of a root "node" and subnodes; for 
example:
CL1:
   Title: "Author"
   Contains: CL1.1,CL1.2
CL1.1:
   Title: "Aardvark, Larry"
   Contains: DOC123,DOC456
CL1.2:
   Title: "Milton, John"
   Contains: DOC789,DOC654

Okay, now for the question.  I have written a Node class to represent 
this most basic level of organization, with subclasses Node_Document 
(representing a document or section thereof) and Node_Classifier (for a 
classifier or subnode thereof).  This makes sense to me for representing 
the metadata, as described above.

http://bitbucket.org/yitznewton/emeraldview/src/tip/application/libraries/Node.php
http://bitbucket.org/yitznewton/emeraldview/src/tip/application/libraries/Node/Classifier.php
http://bitbucket.org/yitznewton/emeraldview/src/tip/application/libraries/Node/Document.php

What happens when I need to deal with the *web page* representing the 
content of a node?  In Greenstone (and thus in EmeraldView), each 
classifier, document, and section has a page view associated with it. 
There are certain behaviors that apply to a web page and not a 
"Model"-level node, such as getUrl(), getSourceDocumentUrl(), getHTML()...

I have been using wrapper classes for the Nodes (Classifier and 
DocumentSection), and, realizing that there is much duplicate 
functionality between the two, thought to make them inherit from a 
common class.

[there are a couple of obsolete duplicate methods in here that I haven't 
cleaned out yet]
http://bitbucket.org/yitznewton/emeraldview/src/tip/application/libraries/Classifier.php
http://bitbucket.org/yitznewton/emeraldview/src/tip/application/libraries/DocumentSection.php

When I came to the question of what to call this parent class, I took a 
step back, wondering, what sort of class is this, exactly?  Does it 
merit a distinct class apart from Node?  I looked through Gang of Four, 
but couldn't find anything that really reflected what I'm trying to do - 
this seems simpler than most of their patterns.  Intuitively it feels to 
me like this should indeed be a separate class from Node, as Node is for 
metadata, and this class is to be for web page behavior.  Perhaps:

NodeWrapper
NodePage
NodePageWrapper
NodeView

Thoughts?

Thanks so much!

-- 
Yitzchak Schaffer
Systems Manager
Touro College Libraries
33 West 23rd Street
New York, NY 10010
Tel (212) 463-0400 x5230
Fax (212) 627-3197
Email [log in to unmask]