{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/blog/2013/04/26/a-rose-by-any-other-name",
    "result": {"data":{"site":{"siteMetadata":{"title":"your friend Joel's digital garden","description":"Articles and notes from a collaborator at egghead.io. Musings on software, business, and life from a skilled virtual assistant.","author":{"name":"Joel Hooks"},"keywords":["Video Blogger"]}},"mdx":{"excerpt":"I posted  an\narticle  about using models to assist in creating leaner, meaner controllers. It resulted in a lively conversation in the comments that spawned an interesting  rebuttal  from  Rob Conery  that essentially says I am full of it…","fields":{"github":"https://github.com/joelhooks/joelhooks-com/tree/master/content/legacy_blog/2013-04-26-a-rose-by-any-other-name.markdown"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"post\",\n  \"title\": \"A rose by any other name?\",\n  \"date\": \"2013-04-26T00:00:00.000Z\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"I posted \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://joelhooks.com/blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application/#comment-875747843\"\n  }, \"an\\narticle\"), \" about using models to assist in creating leaner, meaner controllers. It resulted in a lively conversation in the comments that spawned an interesting \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://wekeroad.com/2013/04/25/models-and-services-in-angular\"\n  }, \"rebuttal\"), \" from \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://twitter.com/robconery\"\n  }, \"Rob Conery\"), \" that essentially says I am full of it, and the names I attach to the patterns I use are wrong.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"This is probably true.\")), mdx(\"p\", null, \"With that truth understood, I also don't go around pulling made up nonsense\\ndefinitions out of my ass. The models bit is battle-tested real working\\npatterns, on a large project, with a good sized team. The terms I use come from\\na mix of sources, with roots in GoF patterns and through my continued education.\\nIt is \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"not\"), \" personal terminology.\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Having said, I'd rather see developers build kick-ass apps that are\\nwell-designed and follow separation of concerns, than see them waste time\\narguing about MV\", \"*\", \" nonsense. And for this reason, I hereby declare AngularJS to\\nbe MVW framework - Model-View-Whatever. Where Whatever stands for \\\"whatever\\nworks for you\\\".\"), mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Angular gives you a lot of flexibility to nicely separate presentation logic\\nfrom business logic and presentation state. Please use it fuel your productivity\\nand application maintainability rather than heated discussions about things that\\nat the end of the day don't matter that much.\")), mdx(\"p\", null, \"The whole situation reminded me of \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://plus.google.com/app/basic/stream/z13vitkjpya0zxcee23ztzmqcor3fzen2\"\n  }, \"this\\npost\"), \" from Igor Minar, regarding\\nAngularJS's status as an MV-WHATEVER framework. For whatever reason, people name\\nthings differently for different reasons. Naming is \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"hugely\"), \" important for our\\ncommon understanding of things. Up to a point. To take an example from\\nnon-coding life, on a recent trip to Italy, I had \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"no clue\"), \" what the name of\\nanything was. A combination of handwaving, pointing, and nodding was more\\neffective than one might think. In some ways, this is true for programming as\\nwell. As long as we eventually agree to build the same thing, it will probably\\nbe \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"OK\"), \".\"), mdx(\"p\", null, \"The conversation came to an abrupt end. My son witnessed the tragic and brutal\\ndeath of a man that we both have a lot of respect for. I was involved with\\nnotifying people of the incident, and it was a really difficult situation. The\\nDisqus notifications were too much, so I disabled the comment thread. Rob\\nsubsequently attempted to delete his comments (which is a shame, but\\nunderstandable) so he is the \\\"guest\\\" commentor. Normally I love a good debate,\\nand this is the first time I've ever done this sort of thing. Rob expressed\\nextreme displeasure and took it as a personal insult. Hopefully he understands\\nthat it is not, and my desire is that we pick up the conversation again one day. Perhaps via a different medium?\"), mdx(\"p\", null, \"I find it highly interesting that two people could have such wildly different\\nworld views when it comes to naming patterns. It would be great to get to the\\nbottom of it, and I suspect in the end we would both be smarter for it.\"), mdx(\"p\", null, \"I've got a fairly strict rule about not posting non-technical stuff here, so\\nthis post is an anomolly. I won't make a habit of stopping conversations, and\\nwanted to put this out here, as it relates directly with this space.\"));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"A rose by any other name?","date":"April 26, 2013","banner":null,"slug":null,"keywords":null}}},"pageContext":{"id":"b0046216-c8ca-59d6-bb34-48c977c066f6","prev":{"id":"90f36e1d-df8c-5c05-8e75-02c2aa5e9541","parent":{"name":"2013-05-01-when-is-a-singleton-not-a-singleton","sourceInstanceName":"legacy"},"excerpt":"The Singleton is the Highlander of design patterns.  There can be only one . An example of a Singleton implementation might look something like this: from Tom Roggero The above JavaScript is from an  answer \nfrom StackOverflow that seemed resonable…","fields":{"title":"AngularJS, Dependency Injection, and when is a singleton not a Singleton?","slug":"blog/2013/05/01/when-is-a-singleton-not-a-singleton","date":"2013-05-01T00:00:00.000Z"}},"next":{"id":"850ec444-559d-5cf0-a126-a75a6f5ff63c","parent":{"name":"2013-04-24-modeling-data-and-state-in-your-angularjs-application","sourceInstanceName":"legacy"},"excerpt":"Respect your data. Contain your state. \nData and state are the foundation of your application. These two items should be\nabsolutely respected. As you work through the AngularJS documentation, these two\nitems are generally stored on the controllers…","fields":{"title":"Modeling Data and State in Your AngularJS Application","slug":"blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application","date":"2013-04-24T00:00:00.000Z"}}}},
    "staticQueryHashes": ["1045846374"]}