Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Modeling -- how to support multiple views of same components?

Reply
Thread Tools

Modeling -- how to support multiple views of same components?

 
 
Trans
Guest
Posts: n/a
 
      07-25-2007
I have a little design conundrum. I'm not sure the best way to model
this. Basically I have two model "parts" and I want to support two
ways of using them. Eg.

class Part1
attr_accessor :a, :b,
end

class Part2
attr_accessor , :y, :z
end

Now in the first case I want effectively:

class Model1 < Part1
def subpart
@subpart ||= Part2.new
end
end

but in the second I want the equivalent of:

class Model2 < Part1 < Part2

but obviously I can't do multiple inheritance.

So I've been trying to figure out the best way to do it. Do I use
modules? Do I use Forwardable? What's the cleanest, fastest, least
troubling way to go about it?

Thanks,
T.


 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      07-26-2007
On 25.07.2007 23:11, Trans wrote:
> I have a little design conundrum. I'm not sure the best way to model
> this. Basically I have two model "parts" and I want to support two
> ways of using them. Eg.
>
> class Part1
> attr_accessor :a, :b,
> end
>
> class Part2
> attr_accessor , :y, :z
> end
>
> Now in the first case I want effectively:
>
> class Model1 < Part1
> def subpart
> @subpart ||= Part2.new
> end
> end
>
> but in the second I want the equivalent of:
>
> class Model2 < Part1 < Part2
>
> but obviously I can't do multiple inheritance.
>
> So I've been trying to figure out the best way to do it. Do I use
> modules? Do I use Forwardable? What's the cleanest, fastest, least
> troubling way to go about it?


It's difficult to comment without knowing the domain or your use case.
IMHO the fact that you want different inheritance hierarchies indicates
that there is something wrong, namely inheritance might not be the best
approach here. It seems like composition would be better but since I do
not know what you are doing please take this with a large grain of salt.

Can you disclose more detail?

Kind regards

robert
 
Reply With Quote
 
 
 
 
Trans
Guest
Posts: n/a
 
      07-26-2007


On Jul 26, 10:55 am, Robert Klemme <(E-Mail Removed)> wrote:

> Can you disclose more detail?


Sure. It's for configuration information. On the one hand, I want to
be able to read package settings from a file that is strictly
dedicated to packaging. So, for instance my project might have
a .package file that has basically:

project: foo
version: 1.1
dependencies: [ facets ]
formats: [zip, tgz, gem]

However, I also want to support an uber-project configuration file,
that would look like:

project: foo
version: 1.1
package:
dependencies: [ facets ]
formats: [zip, tgz, gem]

So I have two slightly different formats that I want to support with
strict classes. Eg. in the first case:

pkg = Package.load(file)
pkg.project #=> 'foo'
pkg.formats #=> ['zip','tgz','gem']

and in the other:

pkg = Project.load(file)
pkg.project #=> 'foo'
pkg.package.formats #=> ['zip','tgz','gem']

So, the same info, but organized in the two different manners, as I
described in the original post.

Note, by "strict class" I mean I'm not just keying off a YAML-loaded
hash. I need a class b/c various attributes have default values,
validation and formating applied, plus supporting methods.

T.


 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      07-26-2007
On 7/25/07, Trans <(E-Mail Removed)> wrote:
You just recently accepted a patch for snapshot, right?
A nice one indeed I think.
Does this ring the same bells to you than to me?

I am thinking of manipulating Hashes instead of classes, did I miss
something or might it work?

Well from the design point of view that would recall Module Inclusion.

Cheers
Robert

>
>
>



--
[...] as simple as possible, but no simpler.
-- Attributed to Albert Einstein

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      07-26-2007
On 26.07.2007 21:18, Trans wrote:
>
> On Jul 26, 10:55 am, Robert Klemme <(E-Mail Removed)> wrote:
>
>> Can you disclose more detail?

>
> Sure. It's for configuration information. On the one hand, I want to
> be able to read package settings from a file that is strictly
> dedicated to packaging. So, for instance my project might have
> a .package file that has basically:
>
> project: foo
> version: 1.1
> dependencies: [ facets ]
> formats: [zip, tgz, gem]
>
> However, I also want to support an uber-project configuration file,
> that would look like:
>
> project: foo
> version: 1.1
> package:
> dependencies: [ facets ]
> formats: [zip, tgz, gem]
>
> So I have two slightly different formats that I want to support with
> strict classes. Eg. in the first case:
>
> pkg = Package.load(file)
> pkg.project #=> 'foo'
> pkg.formats #=> ['zip','tgz','gem']
>
> and in the other:
>
> pkg = Project.load(file)
> pkg.project #=> 'foo'
> pkg.package.formats #=> ['zip','tgz','gem']
>
> So, the same info, but organized in the two different manners, as I
> described in the original post.
>
> Note, by "strict class" I mean I'm not just keying off a YAML-loaded
> hash. I need a class b/c various attributes have default values,
> validation and formating applied, plus supporting methods.


So as far as I can see you have these requirements:

1. reuse of config parameters and their defaults in multiple places

2. default values for config parameters

3. supporting functionality (whatever that is)

Some random thoughts (as I'm pretty tired already): Personally I'd limit
3 to a bare minimum. I am sure there are multiple ways to handle
default values (for example, using a template of nested Hashes and
merging that with something parsed from the config file). OpenStruct or
a similar concept might come in handy. Is validation of config values
better done in (generic?) config classes or in application classes (I
tend to believe the latter, because ensuring proper arguments is a task
of the model). Hm... Probably not too useful. Maybe I have more ideas
after sleeping.

Kind regards

robert
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Seeking help and support for next-gen math modeling tools using Python Rob Clewley Python 0 02-20-2013 05:47 AM
How to combine object-oriented modeling well with database modeling? tenxian Java 2 04-08-2008 01:02 AM
Interest in conceptual data modeling (fact-based modeling)? Clifford Heath Ruby 2 02-07-2007 07:09 AM
Having One Page Produce Multiple Views Tim Rogers ASP .Net 3 11-10-2003 02:02 PM



Advertisments