Og and the 'Composite' pattern


#1

Hello, is there a way to implement the ‘Composite’ pattern in Og?

Probably it should looks like this:

class Item
  property :name, String
  belongs_to :parent, Item
end

class Container < Item
  has_many :items, Item
end

class Image < Item; end
class Post < Item; end
class Folder < Container; end

But i failed to achieve this with Og :frowning:

P.S.
Does ActiveRecords or DataMapper support this feature?

Thanks!


#2

Partially solution. It’s possible to implement subject this way:

class Item
  property :name, String
  belongs_to :parent, Object
end

class Container < Item
  has_many :items, Item
end

class Folder < Item
  has_many :items, Item
end

But, there are major disadvantages:

  • Code duplication, each ‘Container’ should explicitly include ‘has_many
    …’.
  • Instead of ‘Item’ you forced to use ‘Container::Item’ and
    ‘Folder::Item’ and remember about it.
  • Instead of one ‘Item’ table you got two distinct ‘container_item’ and
    ‘folder_item’ tables.

So, this is not the best solution … :frowning:


#3

Thanks there Alexey

I love this post! I have a design need for exactly thing like (both)
‘Item’
and ‘Container’.

As well, I’d like to make a “generic” ‘Container’ that cna accept
'Items"
sub-clases too.

I’d like though to do …

        *class *Data_Table_stuff
            *property*     subclass-of-Item
            *property*     subclass-of-Container

        *end *# Data_Table_stuff

I’ll admit that I’m sitting back on this. My issuer – Still some solid
Og
base is a precursor.

:slight_smile:

2008/6/6 Alexey P. removed_email_address@domain.invalid: