{"id":147,"date":"2010-03-27T21:23:42","date_gmt":"2010-03-27T21:23:42","guid":{"rendered":"http:\/\/www.belouin.com\/blog\/?p=147"},"modified":"2010-03-28T00:45:06","modified_gmt":"2010-03-28T00:45:06","slug":"architecture-against-interface-design","status":"publish","type":"post","link":"http:\/\/belouin.com\/blog\/2010\/03\/architecture-against-interface-design\/","title":{"rendered":"Architecture against Interface Design?"},"content":{"rendered":"<p>I recently came across an interesting problem, which I guess is quite a common one for web application developers. I am currently working on a small to middle sized web application, and the development team is using Merb, a nice and neat MVC framework, and are making very good use of the &#8216;spirit&#8217; and elegance of the conceptual framework provided by this type of architecture, which allows meaningful <em>uri<\/em>s and <em>rest<\/em>fulness. In practice, this results in pretty and simple <em>url<\/em>s such as <em>\/objects\/action<\/em>, or <em>\/object\/identifier\/action<\/em>: a treat for the eyes, a delight for the mind (if the aesthetic contemplation of urls is your kind of things)!<br \/>\n<br \/>\nHowever, things get a bit messier when different types of relationships are introduced: the particular situation to which I was referring at the beginning of this post is I think an interesting example of such situations. Basically I was building the navigation, which for me always consists of first two main levels, the main one pointing to the &#8216;management screen&#8217; of each of the main objects of the system, the second one allowing the user to perform actions common to these objects such as view a particular object, edit it create a new one, etc. Although this nicely fits the MVC model as described earlier, discrepancies emerge rather rapidly: Having &#8216;users&#8217; as a first level navigation item, I wanted to put the roles (as in  &#8216;permission profiles&#8217; that can be applied to users) at the second level after users. However, this would imply &#8216;cheating&#8217; the MVC architecture, by redirecting the <em>\/users\/roles <\/em>url to the actual location of the controller in the MVC architecture, that is to say <em>\/roles\/<\/em> (I hope everybody is still following).<br \/>\n<br \/>\nThis interestingly illustrate that design decisions based on basic UI principles sometimes contradict conceptually elegant models which are nonetheless very powerful for the design of web applications: These therefore need to allow a certain amount of flexibility for allowing discrepancies between the implicit architecture of the system and its representation in the UI, which seeks to reflect not the neat ordering of the relationships between the objects  managed by the system, but the messier interpretation of these by its users.<\/p>\n<p><em>ps thanks to Glen from epiGenesys. I imagine he may think writing a blog post about this is a bit overkill!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently came across an interesting problem, which I guess is quite a common one for web application developers. I am currently working on a small to middle sized web application, and the development team is using Merb, a nice and neat MVC framework, and are making very good use of the &#8216;spirit&#8217; and elegance [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[49,51,47,50,53,52,48,55,54],"class_list":["post-147","post","type-post","status-publish","format-standard","hentry","category-practice","tag-architecture","tag-design-decisions","tag-interface-design","tag-mvc","tag-ui","tag-ui-design","tag-ui-principles","tag-web-applications","tag-web-development"],"_links":{"self":[{"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/posts\/147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/comments?post=147"}],"version-history":[{"count":11,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/posts\/147\/revisions"}],"predecessor-version":[{"id":160,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/posts\/147\/revisions\/160"}],"wp:attachment":[{"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/media?parent=147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/categories?post=147"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/belouin.com\/blog\/wp-json\/wp\/v2\/tags?post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}