Tuesday, 21 June 2011

MVC and our interpretation at 7digital

Introduction

The following details concepts that have been adopted on the site I'm currently working on. This was born out of a discussion that took place among the devteam at the time. Differences in phraseology and meaning were ironed out to come up the following definitions and responsibilities.

Queries(GET)/Commands(POST)

* Contain all the information required to perform an action.
* Data should be bound onto the query before it hits the controller action.
* They are POCO and contain no logic.

Controllers

* Marshall request to handlers and mappers
* Creates the view model from the handler result

Handler

* Process queries/commands
* returns various types (Model/Entity/API DTO)

View Models

* Contains data that you are using in the view, should not expose anything other than view models/value types.

View

* Stuff you show the user, should only contain logic that is required to get the stuff displaying correctly.

Wrappers

* Wrap calls to external api

Services

* Do things that aren't simple, pull together bits and bobs and package them up. Take care of business logic that have cross cutting concerns.

Mappers

* Mappers simply convert one object to another. They DO NOT perform any other logic.

Charts Example from http://www.7digital.com/b/charts

ArtistChartController

* Takes the query from the web request (which has been bound in the pipeline)
* Passes the query to a handler
* Maps response from handler to view model using auto mapper

ArtistChartQueryHandler

* Takes the query
* Does some work to get some configuration options
* Builds up the query further to execute against the API wrapper
* Returns API DTO

Api Wrapper

* Takes query
* Executes against external API
* Parses responses and maps into API DTO object

No comments:

Post a Comment