NSManagedObject is a good example in that Cocoa existed, and was good and useful, long before NSManagedObject came along. NSManagedObject is just one more way to do things. Cocoa != NSManagedObject, and Cocoa - NSManagedObject is still Cocoa. But Rails - ActiveRecord is what, exactly? It'd be like removing NSView from Cocoa. But you have to go way down to the smaller pieces to render Cocoa "not Cocoa" whereas removing almost any piece of Rails makes it "no longer Rails."
(Also, a lot of the "opaqueness" of things like NSManagedObject comes from the closed-source nature. You can bet that CoreData is built using plenty of the smaller Cocoa bits, most of which are already in use in shipping, successful Cocoa apps. It just looks opaque because we can't see how it was done.)
So, that's what I mean by "granularity." Rails is few, large, essential pieces. Cocoa is many, small, generic pieces. Were Cocoa more Rails-like, the source code, structure, and logic of all Cocoa apps would look a lot more similar than they do.
by John — Mar 01
(Also, a lot of the "opaqueness" of things like NSManagedObject comes from the closed-source nature. You can bet that CoreData is built using plenty of the smaller Cocoa bits, most of which are already in use in shipping, successful Cocoa apps. It just looks opaque because we can't see how it was done.)
So, that's what I mean by "granularity." Rails is few, large, essential pieces. Cocoa is many, small, generic pieces. Were Cocoa more Rails-like, the source code, structure, and logic of all Cocoa apps would look a lot more similar than they do.