From: David Tillman Date: 2001-07-29T01:59:13+09:00 Subject: [ruby-talk:18704] HTML Librarys and OOP Design Philosophy Long Post! This isn't 100% on-topic Ruby wise - please bear with me as Ruby users are the type of people I'm interested in hearing input from. Three topics: 1. The reply from David Alan Black (ruby-talk:18683) got me to thinking a bit about object design. When two objects interact, how do you decide which object handles the interaction? It could be that a good OOP design book would clear this up for me, _Design_Patterns_ perhaps? Example: in my HTML (HTMLoop) library for Ruby you can either pass an Array to a Table object or you can tell an Array to output itself as a table. (I think it is convenient to have both as myArray.table returns a string immediately but the Table object waits for a puts, to_s, etc.) When should something be a method and when a function? 'Some String'.color('#dd3333') or color ('Some String', '#dd3333')? 2. Am I reinventing the wheel here by porting HTMLoop to Ruby? I can't seem to find one on the RAA. The methods in CGI don't quite cut it - I like *readable* cgi scripts. (not so much nesting (if you know what I mean)) An example is at: http://www.ozarkaircraftsystems.com/~dtillman/cgi-bin/ruby.cgi This is not a very complex example as 75% of the objects (cgi list boxes, etc.) are broken due to revamping how I am simulating keywords. Criticism is welcome - just keep in mind that I just started coding in Ruby last Monday If there is interest in HTMLoop I will clean it up and put it on RAA. 3. When I originally wrote HTMLoop for CLOS under Scheme, everything remained an object until final output. When I had a brief fling with Python (lasted about a week), I noticed that in its HTML lib all objects were formatted as strings as soon as they are added to any other object. I can see advantages to both methods: If object are formatted as soon as they are put to another object, you can use the same objects repeatedly (with something like Object.flush in between uses), using less memory and so forth. Other the other hand it would also mean that objects could only be packed after all changes had been made - this is not really a big deal. A little more sticky is that it would become somewhat more complex to tell when to CGI.escapeHTML something. If you were using an HTML lib, which method would you prefer? My apologies for the length of this post. -Dave -- David Tillman | System Administrator dtillman@ozarkaircraftsystems.com | Ozark Aircraft Systems