On Oct 16, 2012, at 1:25 PM, Yehuda Katz wrote:
> Agreed. For example:
>
> class Post {
>
> }
>
> class Comment {
>
> }
>
> Post.hasMany("comments");
> Comment.belongsTo("post");
>
> let post = new Post()
> let comment = new Comment();
>
> comment.post = post;
> post.comments //=> [comment]
A great example of where you should not use an accessor. As a rough guideline
accessors (which are syntactically models after state attributes) should be
used to set/query local characteristics of objects. Methods should be use for
complex computations and for establishing and accessing complex relationships
among objects. Why? Because experience with complex object models have shown
that you have more understandable/extensible/maintainable systems when you are
careful about where and how you expose coupling among objects.
In this case, there is a bi-directional n-to-one relationship being maintained
between objects. Such complex relationships are best modeled using methods
because their require establishing and maintaining the relationship requires
state changes in multiple objects. Expressing the operation as a method serves
as a warning that something more complex than simply updating some local state
is going on.
>
> This is similar to certain DOM APIs, and my expectation of a hypothetical
> version of Ember Data in ES6 would work. I don't think there is anything
> wrong with using an accessor here.
I don't think anybody hold the DOM up as a stelar example of Object-oriented
design.
You might not agree with the above guideline, or choose to follow it. That's
fine. But, what you you propose as an alternative. What are your guidelines
for choosing to use an accessor rather than a method? If you consider you
example to be a reflection of "good design" what are the specific design
principles it is following. Why is that an appropriate place to use an
accessor.
Allen
>
> Yehuda Katz
> (ph) 718.877.1325
>
>
> On Tue, Oct 16, 2012 at 4:12 PM, Erik Arvidsson <[email protected]>
> wrote:
> On Mon, Oct 15, 2012 at 12:23 PM, Brendan Eich <[email protected]> wrote:
> > * get/set accessor may have effects on 'set' (see the DOM) but only on the
> > receiver object (and unobservably, any children that become garbage, e.g.
> > when trimming .length on an array-like).
>
> That is very limiting, even as a guideline. Any time there are two or
> more related objects it is very likely that a setter might affect some
> other object.
>
> --
> erik
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss