FROM : Paul Szego
DATE : Fri Apr 08 11:50:41 2005
On 06/04/2005, at 7:52 PM, mmalcolm crawford wrote:
>
> On Apr 5, 2005, at 11:22 PM, Paul Szego wrote:
>
>>
>> On 06/04/2005, at 2:48 PM, Will Mason wrote:
>>>> On the other hand, if you don't need all these services and just aim
>>>> for persistence, CoreData aren't what you need: just use an
>>>> NSArchiver, and you get the support for any NSObject :))
>>>>
>>>
>>> No, you don't. An object can be archived (sent to/read from an
>>> NSCoder)
>>> only if it adopts the NSCoding protocol.
>>>
>>
>> A similar approach for CoreData would be better. Having a base class
>> that implements this for free is a good thing, as long as that's not
>> the only way to do it. Hopefully you wont be forced to extend a
>> specific base class - that's just bad design.
>>
> The article is very clear:
> "By default, the class used is NSManagedObject, but the class may be
> either NSManagedObject or a subclass thereof."
>
> If Core Data only addressed object persistence, then it might be
> argued that this would be poor design.
My comments were about the design of the framework, and whether it's a
persistence framework or logging framework or anything doesn't really
matter. The same principles still apply.
> As noted earlier, however, it also solves a much more difficult
> problem, and one that really only affects data objects. Given the
> functionality that's provided for free, requiring that your model
> classes inherit (ultimately) from NSManagedObject instead of NSObject
> does not seem too onerous (I suspect in most cases this will simply
> involve adding 7 characters to your declaration...).
Forcing someone to extend a specific base class in order to work with a
framework is fundamentally flawed, and not necessary.
You are putting serious constraints on the class hierarchy. What if
I've already got a rich class hierarchy, and only want some of my
existing classes to be persistent? What if I want my class to use two
frameworks, that both insist I extend their base class? What if I'm
already extending another base class of my own? If my object model is
one of the problem domain, I shouldn't be constrained about how to
implement it just because of a particular technology choice.
And there is no need to force such constraints onto developers. It's
bad design of the framework. It's already widely accepted to be a key
selection criteria for persistence frameworks in other development
environments, and most often solutions that force this approach on the
developer are dismissed out of hand for anything but the most trivial
of applications.
The issue here is inheritance. It shouldn't be used as a shortcut for
getting utility function for free. If we're talking about model class
(in the MVC sense) then it should be used to model "IS-A" relationships
that exist between the things these classes represent in the underlying
problem domain.
It's also so very simple to avoid. Just define a protocol for the
responsibilities of a class wanting to participate in whatever this
framework offers. You can always provide a "helper" base class for the
simple (perhaps even majority) case where that's suitable. Then if you
can't or don't want to extend the base class you're not dead in the
water.
>
> Indeed it's reasonable to argue that putting all the functionality of
> a model object into the root class would be bad design. It would add
> an unnecessary overhead to all the other system classes, from views to
> controls to strings (which don't need to know what entity they
> represent or what context they belong to(*))...
I didn't suggest that it belongs in NSObject. I also believe that would
be a mistake.
Paul.
DATE : Fri Apr 08 11:50:41 2005
On 06/04/2005, at 7:52 PM, mmalcolm crawford wrote:
>
> On Apr 5, 2005, at 11:22 PM, Paul Szego wrote:
>
>>
>> On 06/04/2005, at 2:48 PM, Will Mason wrote:
>>>> On the other hand, if you don't need all these services and just aim
>>>> for persistence, CoreData aren't what you need: just use an
>>>> NSArchiver, and you get the support for any NSObject :))
>>>>
>>>
>>> No, you don't. An object can be archived (sent to/read from an
>>> NSCoder)
>>> only if it adopts the NSCoding protocol.
>>>
>>
>> A similar approach for CoreData would be better. Having a base class
>> that implements this for free is a good thing, as long as that's not
>> the only way to do it. Hopefully you wont be forced to extend a
>> specific base class - that's just bad design.
>>
> The article is very clear:
> "By default, the class used is NSManagedObject, but the class may be
> either NSManagedObject or a subclass thereof."
>
> If Core Data only addressed object persistence, then it might be
> argued that this would be poor design.
My comments were about the design of the framework, and whether it's a
persistence framework or logging framework or anything doesn't really
matter. The same principles still apply.
> As noted earlier, however, it also solves a much more difficult
> problem, and one that really only affects data objects. Given the
> functionality that's provided for free, requiring that your model
> classes inherit (ultimately) from NSManagedObject instead of NSObject
> does not seem too onerous (I suspect in most cases this will simply
> involve adding 7 characters to your declaration...).
Forcing someone to extend a specific base class in order to work with a
framework is fundamentally flawed, and not necessary.
You are putting serious constraints on the class hierarchy. What if
I've already got a rich class hierarchy, and only want some of my
existing classes to be persistent? What if I want my class to use two
frameworks, that both insist I extend their base class? What if I'm
already extending another base class of my own? If my object model is
one of the problem domain, I shouldn't be constrained about how to
implement it just because of a particular technology choice.
And there is no need to force such constraints onto developers. It's
bad design of the framework. It's already widely accepted to be a key
selection criteria for persistence frameworks in other development
environments, and most often solutions that force this approach on the
developer are dismissed out of hand for anything but the most trivial
of applications.
The issue here is inheritance. It shouldn't be used as a shortcut for
getting utility function for free. If we're talking about model class
(in the MVC sense) then it should be used to model "IS-A" relationships
that exist between the things these classes represent in the underlying
problem domain.
It's also so very simple to avoid. Just define a protocol for the
responsibilities of a class wanting to participate in whatever this
framework offers. You can always provide a "helper" base class for the
simple (perhaps even majority) case where that's suitable. Then if you
can't or don't want to extend the base class you're not dead in the
water.
>
> Indeed it's reasonable to argue that putting all the functionality of
> a model object into the root class would be bad design. It would add
> an unnecessary overhead to all the other system classes, from views to
> controls to strings (which don't need to know what entity they
> represent or what context they belong to(*))...
I didn't suggest that it belongs in NSObject. I also believe that would
be a mistake.
Paul.
| Related mails | Author | Date |
|---|---|---|
| mmalcolm crawford | Apr 5, 17:33 | |
| Philip Mötteli | Apr 5, 23:49 | |
| Guy English | Apr 6, 00:29 | |
| Scott Stevenson | Apr 6, 01:14 | |
| Dustin Voss | Apr 6, 02:18 | |
| James Duncan David… | Apr 6, 02:27 | |
| Jake Macmullin | Apr 6, 02:31 | |
| John C. Randolph | Apr 6, 02:55 | |
| James Duncan David… | Apr 6, 03:01 | |
| Ondra Cada | Apr 6, 04:04 | |
| Will Mason | Apr 6, 04:48 | |
| Rogelio M.Serrano… | Apr 6, 06:05 | |
| Rogelio M.Serrano… | Apr 6, 06:06 | |
| mmalcolm crawford | Apr 6, 07:46 | |
| Paul Szego | Apr 6, 08:22 | |
| mmalcolm crawford | Apr 6, 09:52 | |
| ?????Andre? | Apr 6, 09:55 | |
| Ondra Cada | Apr 6, 12:21 | |
| oplus | Apr 6, 12:32 | |
| Mont Rothstein | Apr 6, 12:36 | |
| Philip Mötteli | Apr 6, 14:47 | |
| Scott Stevenson | Apr 6, 18:00 | |
| mmalcolm crawford | Apr 6, 18:39 | |
| Nat! | Apr 6, 22:35 | |
| mmalcolm crawford | Apr 6, 23:47 | |
| Timothy Reaves | Apr 7, 00:25 | |
| mmalcolm crawford | Apr 7, 00:50 | |
| Shawn Erickson | Apr 7, 01:05 | |
| James Duncan David… | Apr 7, 01:28 | |
| Todd Blanchard | Apr 7, 06:37 | |
| Todd Blanchard | Apr 7, 06:41 | |
| Scott Stevenson | Apr 7, 06:59 | |
| Philip Mötteli | Apr 7, 08:32 | |
| Marcel Weiher | Apr 7, 11:59 | |
| Charlton Wilbur | Apr 7, 15:11 | |
| Mike Ferris | Apr 7, 16:53 | |
| Marcel Weiher | Apr 7, 16:55 | |
| Marco Scheurer | Apr 7, 17:55 | |
| Marcel Weiher | Apr 7, 19:13 | |
| Scott Stevenson | Apr 7, 19:55 | |
| Marcel Weiher | Apr 7, 21:03 | |
| Mike R. Manzano | Apr 7, 21:21 | |
| Timothy Reaves | Apr 7, 22:03 | |
| Evan DiBiase | Apr 7, 22:28 | |
| Marcel Weiher | Apr 7, 22:35 | |
| mmalcolm crawford | Apr 7, 23:05 | |
| ttempel | Apr 8, 01:50 | |
| Paul Szego | Apr 8, 11:50 | |
| Johnny Deadman | Apr 8, 14:10 | |
| Philippe Mougin | Apr 8, 16:52 | |
| Shawn Erickson | Apr 8, 17:07 | |
| Shawn Erickson | Apr 8, 17:17 | |
| Ralph Scheuer | Apr 8, 17:28 | |
| Ralph Scheuer | Apr 8, 17:32 | |
| John Brownlow | Apr 8, 17:47 | |
| Charlton Wilbur | Apr 8, 18:34 | |
| Scott Stevenson | Apr 8, 18:43 | |
| Ralph Scheuer | Apr 8, 19:03 | |
| Philippe Mougin | Apr 8, 20:37 | |
| Scott Ellsworth | Apr 8, 21:46 | |
| Scott Ellsworth | Apr 8, 21:48 | |
| Evan DiBiase | Apr 8, 22:16 | |
| mmalcolm crawford | Apr 8, 22:30 | |
| mmalcolm crawford | Apr 8, 23:13 | |
| Marcel Weiher | Apr 9, 02:20 | |
| Marcel Weiher | Apr 9, 02:46 | |
| Scott Ellsworth | Apr 9, 09:39 | |
| Marcel Weiher | Apr 9, 09:44 | |
| Byron Ellis | Apr 9, 10:37 | |
| Marcel Weiher | Apr 9, 14:03 | |
| Charlton Wilbur | Apr 9, 16:01 | |
| ?????Andre? | Apr 9, 18:08 | |
| Scott Stevenson | Apr 9, 18:24 | |
| Scott Stevenson | Apr 9, 18:27 | |
| Marcel Weiher | Apr 10, 00:06 | |
| Marcel Weiher | Apr 10, 00:16 | |
| Marcel Weiher | Apr 10, 00:38 | |
| ?????Andre? | Apr 10, 01:03 | |
| Charlton Wilbur | Apr 10, 01:13 | |
| mmalcolm crawford | Apr 10, 01:53 | |
| Scott Stevenson | Apr 10, 01:58 | |
| Todd Blanchard | Apr 10, 08:32 | |
| mmalcolm crawford | Apr 10, 08:52 | |
| mmalcolm crawford | Apr 10, 09:25 | |
| PA | Apr 10, 12:08 | |
| mmalcolm crawford | Apr 30, 10:18 |






Cocoa mail archive

