Click here to Skip to main content
15,885,366 members
Articles / Web Development / CSS

Building a 3-Tier App with Silverlight 3, .NET RIA Services, and Azure Table Storage

Rate me:
Please Sign up or sign in to vote.
4.89/5 (28 votes)
11 Jul 2009CDDL19 min read 164.1K   1.7K   148  
This article presents the techniques and caveats of building a 3-tire Azure hosted application using Silverlight 3 (presentation tier), .NET RIA services (business logic and data access), and Windows Azure Table (data storage).
using System;
using System.Text;

using System.Collections.Generic;

using SilverlightCairngorm.Command;

namespace SilverlightCairngorm.Control
{
    /// <summary>
    /// The system controller's parent, implementing the event-command
    /// relationship inner-workings, using a dictionary relating
    /// event names to commands.
    /// 
    /// subscribes to the EventDispatched event of the CairngormEventDispatcher
    /// to handle all system events.
    /// </summary>
    public abstract class FrontController
    {
        /// <summary>
        /// The dictionary of eventNames and corresponding commands to be executed
        /// </summary>
        private Dictionary<string, Type> eventMap = new Dictionary<string, Type>();

        public FrontController()
        {
			CairngormEventDispatcher.Instance.EventDispatched +=
				new CairngormEventDispatcher.EventDispatchDelegate(ExecuteCommand);
        }

        /// <summary>
        /// Whenever the CairngormEventDispatcher raises an event, this
        /// method gets the CairngormEvent inside it - and calls
        /// the execute() method on the corresponding ICommand
        /// </summary>
        /// <param name="sender">Unused</param>
		/// <param name="args">The CairngormEventArgs containing an instance of the raised CairngormEvent</param>
		void ExecuteCommand(object sender, CairngormEventArgs args)
        {
            if (eventMap.ContainsKey(args.raisedEvent.Name))
            {
                ICommand cmdInstance = Activator.CreateInstance(eventMap[args.raisedEvent.Name]) as ICommand;
				cmdInstance.execute(args.raisedEvent);
            }
        }

        /// <summary>
        /// register a Cairngorm event to FrontController
        /// </summary>
        /// <param name="cairngormEventName"></param>
        /// <param name="command"></param>
        public void addCommand(string cairngormEventName, Type commandType)
        {
			//one command type can only register once
			if (eventMap.ContainsKey(cairngormEventName))
				throw new CairngormError(CairngormMessageCodes.COMMAND_ALREADY_REGISTERED, cairngormEventName);
			//the command type MUST implement ICommand interface
			if (!(typeof(ICommand).IsAssignableFrom(commandType)))
				throw new CairngormError(CairngormMessageCodes.COMMAND_NOT_IMPLEMENT_ICOMMAND, cairngormEventName);

			eventMap.Add(cairngormEventName, commandType);
        }

		public void removeCommand(string commandName) 
		{
			if (eventMap.ContainsKey(commandName))
				eventMap.Remove(commandName);
		}

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Common Development and Distribution License (CDDL)


Written By
Technical Lead
United States United States
https://github.com/modesty

https://www.linkedin.com/in/modesty-zhang-9a43771

https://twitter.com/modestyqz

Comments and Discussions