Thanks for all the comments. 

It seems I have to rewrite the first part of my introductory WO-tutorial on 
creating a webobjects app, in which I did a vertical inheritance with 
subclasses of the contacts.


On 21 aug. 2011, at 00:04, David Avendasora wrote:

> 
> On Aug 20, 2011, at 10:43 PM, Ken Anderson wrote:
> 
>> David,
>> 
>> When you say have a Relationship to the abstract Role class, I'm assuming 
>> you're recommending inheritance here.  I do it the exact same way, just 
>> wanted to make sure it's not confusing to say "do abstract this" and also 
>> "get rid of inheritance".
> 
> Ah. Yes. Good point. I meant get rid of Inheritance on Contact. The roles 
> themselves can make use of inheritance, or an even better way is for them to 
> be individual Classes, but use interfaces to enforce what behaviors they each 
> must have. Then you can have multiple interfaces associated with each role. 
> 
>> For me, I have this type of structure in a few places.  In one of them, the 
>> subclasses of Role use single table inheritance, since the subclasses all 
>> have similar data, but the methods are different.  For another, I use 
>> horizontal, since the data structures vary significantly.  Thankfully, there 
>> aren't thousands of objects, so performance is not a problem here.
>> 
>> Johan, you can always implement something in your Contact class like:
>> 
>> - (boolean) isActor {
>>     //  check to see if the to-one (or to-many) role(s) relationship has an 
>> instance of the Actor role
>> }
>> 
>> or something like this:
>> 
>> - (ActorRole *) actorRole {
>>    // find actor role in relationship or return null
>> }
>> 
>> to see if the contact fits the bill for a particular situation or not.  
>> Personally, I always make the role relationship to-many, so that someone can 
>> have multiple roles (will ALWAYS happen IMHO).
>> 
>> Ken
>> 
>> On Aug 20, 2011, at 6:33 AM, David Avendasora wrote:
>> 
>>> I've been there, Johan. Don't use inheritance. That's what is messing with 
>>> you. An EO can't switch from being one Class to another. It completely 
>>> er... um... screws with EOF.
>>> 
>>> Get rid of the inheritance. Just have a Contact class that has a 
>>> relationship to the abstract Role class, and make all the the roles 
>>> subclasses of Role. You can change a contacts behaviors by setting the role 
>>> relationship to an instance of one of the subclasses on-the-fly, however 
>>> you want. Each subclass of Role can implement the various behaviors in 
>>> their own way.
>>> 
>>> The trick is that when you want a contact to behave as an actor, you set 
>>> the role relationship to an instance of actor then call 
>>> contact.role.assignUnderstudy(contact).
>>> 
>>> Wait, you say, it is completely invalid to take a role 
>>> nicepersontoalwayinviteforfreetoanyshow and say 
>>> contact.role.assgnUnderstudy(contact)! well, the 
>>> NicePersonToAlwaysInviteForFreeToAnyShow class has an empty implementation 
>>> of the assgnUnderstudy(contact) method, or one that throws an error that 
>>> the UI catches to tell the user that they are a daft git for doing 
>>> something stupid as trying to give a  
>>> nicepersontoalwayinviteforfreetoanyshow an understudy. Shesh. Everyone 
>>> knows they can only be assigned AS understudies.
>>> 
>>> That's the basics. Just get rid of Inheritance. Especially Vertical 
>>> Inheritance (sorry Lachlan).
>>> 
>>> Dave
>>> 
>>> On Aug 20, 2011, at 4:58 PM, Johan Henselmans wrote:
>>> 
>>>> 
>>>> On 20 aug. 2011, at 01:26, Chuck Hill wrote:
>>>> 
>>>>> 
>>>>> On 2011-08-19, at 2:46 PM, Johan Henselmans wrote:
>>>>> 
>>>>>> My idea:
>>>>>> 
>>>>>> I have an entity contact, that gets vertically inherited into actor, 
>>>>>> employee, visitor, nicepersontoalwayinviteforfreetoanyshow, whatever, 
>>>>>> based on the role somebody/thing plays. 
>>>>>> 
>>>>>> A contact can have different roles, which makes this contact playing 
>>>>>> actor, employee, visitor, nicepersontoalwayinviteforfreetoanyshow or 
>>>>>> whatever. So there is a m-n relation roles in a contact. 
>>>>> 
>>>>> Where is Kieran?  This is his favourite question.  It sounds like you 
>>>>> should be using the Role pattern and not inheritance.  
>>>>> http://objectdiscovery.com/solutions/publications/roles/index.html
>>>>> 
>>>>> 
>>>> 
>>>> I thought I used a Role pattern. situation:
>>>> base class is contact, others are inheritances all in the same table
>>>> contact - visitor 
>>>>          -actor 
>>>>               -director
>>>>              -nice person
>>>> 
>>>> role class - (defined via eo) 
>>>> 
>>>> contact<->role m:n
>>>> 
>>>> I would assume that figure 13 in the article would be the most desirable 
>>>> solution, as the role definition is dynamic (roles can be added)
>>>> 
>>>> 
>>>> <figure-13.gif>
>>>> 
>>>> but I do not get how in that situation the specific methods and data of a 
>>>> specific role would then be defined. Or perhaps I miss the point?
>>>> 
>>>> For instance, and actor can have a relationship to a specific show, a 
>>>> theatergroup, a paycheck, a visitor can have visited a specific 
>>>> performance, etc. Where would you define that kind of behavior? 
>>>> 
>>>> 
>>>> 
>>>>> 
>>>>>> I assumed that I should be able to create and get a visitor if I could 
>>>>>> describe in the EOModel qualifier something like roles.ROLE.name = 
>>>>>> 'visitor'
>>>>>> 
>>>>>> Something like this:
>>>>>> <PastedGraphic-3.png>
>>>>>> And I would create the relation to the role in the awakeFromInsertion 
>>>>>> phase of the Visitor. 
>>>>>> 
>>>>>> Of course this is not working, (nothing ever works where I live) as I am 
>>>>>> getting 
>>>>>> 
>>>>>> takeValueForKey(): attempt to assign value to unknown key: 
>>>>>> 'roles.ROLE.name'. This class does not have an instance variable of the 
>>>>>> name roles.ROLE.name
>>>>>> 
>>>>>> 
>>>>>> What is the proper incantation to do this?
>>>>> 
>>>>> I think that is not possible.  The restricting qualifier has to be 
>>>>> evaluated on that single entity only.
>>>>> 
>>>>> Chuck
>>>>> 
>>>>> -- 
>>>>> Chuck Hill             Senior Consultant / VP Development
>>>>> 
>>>>> Practical WebObjects - for developers who want to increase their overall 
>>>>> knowledge of WebObjects or who are trying to solve specific problems.    
>>>>> http://www.global-village.net/products/practical_webobjects
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> Johan Henselmans
>>>> jo...@netsense.nl
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/webobjects%40avendasora.com
>>>> 
>>>> This email sent to webobje...@avendasora.com
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/webobjects-dev/kenlists%40anderhome.com
>>> 
>>> This email sent to kenli...@anderhome.com
>> 
> 

Johan Henselmans
jo...@netsense.nl



 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to