On Friday, July 15, 2016 at 9:49:41 PM UTC-7, Erik Lott wrote:
>
> Max, build a non-trival 15+ page SPA within a single elm component, and 
> tell me how that goes :)
>
> On Friday, July 15, 2016 at 8:08:23 PM UTC-4, Max Goldstein wrote:
>>
>> Allow me to suggest that this approach is *totally overkill*. It might 
>> not be, but this is something Richard and I were discussing last night at 
>> the meetup. If you come from React, everything is a component, so you reach 
>> for them. But, for many uses cases, nesting TEA is unnecessary. Go ahead 
>> and make Model and Msg huge types. The compiler will keep you from breaking 
>> things.
>
>
I agree with Max's original statement. I would give each logical "page" its 
own Model, View, and Update, and that's probably it.

This is effectively what we've done at NoRedInk with our *50,000 lines of 
production Elm code*, and it has been extremely rare to find examples where 
nesting an entire model, view, and update further than that was a good idea.

> When you're building something at a larger scale like a single page app, 
> that contains various layouts, menus, &  pages - which contain several 
> components per page - you'll need components to keep your code organized, 
> maintainable, and easy to understand.  

I strongly disagree with this.

Every time I've followed this approach I've regretted it. It introduced 
substantial communication overhead, making my code harder to work with, and 
got me vanishingly little in return. When I've chosen not to do this, and 
to instead focus on localized refactors like "this record is too big, so 
I'll split it into a few smaller records" or "this Msg is too big, so I'll 
split into a few smaller union types," the code has ended up much easier to 
maintain at scale.

My strong impression is that the pattern presented in OP is a band-aid over 
a self-inflicted wound. I would advise against using it, and instead *choosing 
not to self-inflict that communication overhead in the first place*. 
Scaling by thinking in terms of "components" is a natural fit for React, 
and an extremely poor fit for Elm.

Don't do this to yourself!

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to