{"id":373,"date":"2015-01-27T11:09:33","date_gmt":"2015-01-27T11:09:33","guid":{"rendered":"http:\/\/adriangrigoras.com\/blog\/?p=373"},"modified":"2015-01-27T11:09:33","modified_gmt":"2015-01-27T11:09:33","slug":"presentation-layer-checklist","status":"publish","type":"post","link":"https:\/\/adriangrigoras.com\/blog\/presentation-layer-checklist\/","title":{"rendered":"Presentation layer checklist"},"content":{"rendered":"<h3>Design Considerations<\/h3>\n<ul>\n<li>UI technology choice is based on application requirements and constraints.<\/li>\n<li>Relevant presentation layer patterns such as Template View pattern are identified and used in the design.<\/li>\n<li>The application is designed to separate rendering components from components that manage presentation data and process.<\/li>\n<li>Organizational UI guidelines are well understood and addressed by the design.<\/li>\n<li>The design is based upon knowledge of how the user wants to interact with the system.<\/li>\n<\/ul>\n<h3>Caching<\/h3>\n<ul>\n<li>Volatile data is not cached.<\/li>\n<li>Sensitive data is not cached unless absolutely necessary and encrypted.<\/li>\n<li>Data is cached is a ready to use format to reduce processing after the cached data is retrieved.<\/li>\n<li>Local caches are not used if your application is deployed in Web farm.<\/li>\n<\/ul>\n<h3>Composition<\/h3>\n<ul>\n<li>Dynamic layouts are avoided, when possible.<\/li>\n<li>Abstraction patterns are used to avoid dependencies between components.<\/li>\n<li>Composite View pattern is used if you need to compose views from modular, atomic components.<\/li>\n<li>Template View pattern, through the use of Master Pages, is used to create consistent, reusable, dynamic web pages.<\/li>\n<li>Publish\/Subscribe pattern is used for communication between dynamically loaded modules.<\/li>\n<li>Command pattern is used to support menu and command-driven interaction.<\/li>\n<\/ul>\n<h3>Exception Management<\/h3>\n<ul>\n<li>Sensitive data or internal application details are not revealed to users through error messages or in exceptions that cross trust boundaries.<\/li>\n<li>User-friendly error messages are displayed in the event of an exception that impacts the user.<\/li>\n<li>Unhandled exceptions are captured.<\/li>\n<li>Exceptions are not used to control application logic.<\/li>\n<li>System exceptions and business errors are identified.<\/li>\n<li>Exceptions are logged to support troubleshooting when necessary.<\/li>\n<\/ul>\n<h3>Input<\/h3>\n<ul>\n<li>Forms-based input is used for normal data collection.<\/li>\n<li>Document-based input is used for collecting input in Microsoft Office\u2013style documents.<\/li>\n<li>Wizard-based input is used for complex data collection tasks or input that requires workflow.<\/li>\n<li>Device-dependant input, such as ink or speech, is considered in the design.<\/li>\n<li>Accessibility was considered in the design.<\/li>\n<li>Localization was considered in the design.<\/li>\n<\/ul>\n<h3>Layout<\/h3>\n<ul>\n<li>Templates are used to provide a common look and feel.<\/li>\n<li>A common layout is used to maximize accessibility and ease of use.<\/li>\n<li>The layout considers device-dependent input, such as touch screens, ink, or speech.<\/li>\n<li>If you are designing a web application, Cascading Style Sheets (CSS) are used wherever possible for layout.<\/li>\n<li>Design patterns such as MVP are used to separate layout design from interface processing.<\/li>\n<\/ul>\n<h3>Navigation<\/h3>\n<ul>\n<li>Navigation is separated from UI processing.<\/li>\n<li>Toolbars and menus are designed to help users find functionality provided by the UI.<\/li>\n<li>Wizards are used to implement navigation between firms in a predictable way.<\/li>\n<li>If navigation state is needed across sessions, the application is designed to persist navigation state.<\/li>\n<li>Command pattern is used to handle common actions from multiple sources.<\/li>\n<\/ul>\n<h3>Presentation Entities<\/h3>\n<ul>\n<li>Presentation entities are used only if you need to manage unique data or data formats in the presentation layer.<\/li>\n<li>Presentation entities do not contain business logic.<\/li>\n<li>Custom classes are used to map data directly to business entities.<\/li>\n<li>Platform-provided classes, such as DataSets or Arrays, are used for data-bound controls.<\/li>\n<li>Presentation entities contain input validation logic for the presentation layer.<\/li>\n<\/ul>\n<h3>Request Processing<\/h3>\n<ul>\n<li>Requests do not block the UI.<\/li>\n<li>Long running requests are identified in the design and optimized for UI responsiveness.<\/li>\n<li>UI request processing are unique components and are not mixed with components that render the UI or components that instantiate business rules.<\/li>\n<li>Passive View pattern is used to design interfaces that do not manage a lot of data.<\/li>\n<li>Supervising Controller pattern is used for interfaces that manage large amounts of data.<\/li>\n<\/ul>\n<h3>User Experience<\/h3>\n<ul>\n<li>UI responsiveness is considered in the design. For instance, rich clients don\u2019t block UI threads and Rich Internet Applications avoid synchronous processing.<\/li>\n<li>AJAX is used if you are building a web application and user responsiveness is important.<\/li>\n<li>The design has identified key user scenarios and has made them as simple to accomplish as possible.<\/li>\n<li>The design supports personalization, localization, and accessibility.<\/li>\n<li>The design empowers users, allowing them to control how they interact with the application and how it displays data.<\/li>\n<\/ul>\n<h3>UI Components<\/h3>\n<ul>\n<li>Platform provided controls are used except for where it is absolutely necessary to use a custom or third party control for specialized display or input tasks.<\/li>\n<li>Platform provided data-binding is used where possible.<\/li>\n<li>Custom controls are created extending existing controls.<\/li>\n<li>State is stored in platform provided state management features, such as ViewState, for ASP.NET applications.<\/li>\n<li>Presentation Model pattern is used to manage UI state in WPF or Silverlight applications.<\/li>\n<\/ul>\n<h3>UI Processing Components<\/h3>\n<ul>\n<li>UI process components are created only when necessary.<\/li>\n<li>If the UI requires complex processing, UI processing has been decoupled from rendering and display into unique UI processing components.<\/li>\n<li>If the UI requires complex workflow support, the design includes unique workflow components that use a workflow system such as Windows Workflow.<\/li>\n<li>UI processing has been divided into model, view and controller or presenter by using the MVC or MVP pattern.<\/li>\n<li>UI processing components do not include business rules.<\/li>\n<\/ul>\n<h3>Validation<\/h3>\n<ul>\n<li>The application constrains, rejects and sanitizes all input that comes from the client.<\/li>\n<li>Server-side validation is used to validate input for security purposes.<\/li>\n<li>Client-side validation is used to validate input for user experience purposes, for instance to give the user error messages after receiving poor input.<\/li>\n<li>Built-in validation controls are used when possible.<\/li>\n<li>AJAX is used in Web applications to provide real-time validation.<\/li>\n<li>Validation routines are centralized, where possible, to improve maintainability and reuse.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Source: apparch.codeplex.com<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Design Considerations UI technology choice is based on application requirements and constraints. Relevant presentation layer patterns such as Template View pattern are identified and used in the design. The application is designed to separate rendering components from components that manage presentation data and process. Organizational UI guidelines are well understood and addressed by the design.\u2026 <span class=\"read-more\"><a href=\"https:\/\/adriangrigoras.com\/blog\/presentation-layer-checklist\/\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-373","post","type-post","status-publish","format-standard","hentry","category-architecture"],"_links":{"self":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/comments?post=373"}],"version-history":[{"count":1,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/373\/revisions"}],"predecessor-version":[{"id":374,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/posts\/373\/revisions\/374"}],"wp:attachment":[{"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/media?parent=373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/categories?post=373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adriangrigoras.com\/blog\/wp-json\/wp\/v2\/tags?post=373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}