Architectural Design for a Data-Driven Silverlight WP7 app

Posted by Rosarch on Stack Overflow See other posts from Stack Overflow or by Rosarch
Published on 2010-12-30T04:35:09Z Indexed on 2011/01/02 10:53 UTC
Read the original article Hit count: 169

I have a Silverlight Windows Phone 7 app that pulls data from a public API. I find myself doing much of the same thing over and over again:

  • In the UI, set a loading message or loading progress bar in place of where the content is
  • Get the content, which may be already in memory, cached in isolated file storage, or require an HTTP request
  • If the content can not be acquired (no network connection, etc), display an error message
  • If the content is acquired, display it in the UI
  • Keep the content in main memory for subsequent queries

The content that is displayed to the user can be taken directly from a data source, such as an ObservableCollection, or it may be a query on a data source.

I would like to factor out this repetitive process into a framework where ideally only the following needs to be specified:

  • Where to display the content in the UI
  • The UI elements to show while loading, on failure, and on success
  • The URI of the HTTP request
  • How to parse the HTTP response into the data structure that will kept in memory
  • The location of the file in isolated storage, if it exists
  • How to parse the file contents into the data structure that will be kept in memory

It may sound like a lot, but two strings, three FrameworkElements, and two methods is less than the overhead that I currently have.

Also, this needs to work for however the data is maintained in memory, and needs to work for direct collections and queries on those collections.

My questions are:

Has something like this already been implemented?

Are my thoughts about the topic above fundamentally wrong in some way?

Here is a design I'm thinking of:

There are two components, a View and a Model.

The View is given the FrameworkElements for loading, failure, and success. It is also given a reference to the corresponding Model. The View is a UserControl that is placed somewhere in the UI.

The Model a class that is given the URI for the data, a method of how to parse the data, and optionally a filename and how to parse the file. It is responsible for retrieving the data and notifying the View whenever the current status (loading/fail/success) changes. If the data downloaded from the network is different from the cache, the network data takes precedence. When the app closes or is tombstoned, the model writes the data to the cache.

How does that sound?

© Stack Overflow or respective owner

Related posts about Silverlight

Related posts about architecture