|
using System;
using Model;
using Model.Data.Interfaces;
using Presentation.Interfaces;
namespace Presentation
{
/// <summary>
/// CustomersPresenter is the presenter in the event driven MVP relationship.
/// CustomersPresenter subscribes to events on its view and responds as
/// necessary, telling the view what to do. It does not request information
/// from the view, it only tell it what to do based on events raised by the view.
///
/// This MVP relationship is more of a Passive View.
/// </summary>
public class CustomersPresenter
{
private ICustomersView view = null;
private IDomainDAO<ICustomer> model = null;
// public event the ASPX page will register
public event EventHandler<SingleValueEventArgs<string>> RequestCustomerEdit;
public CustomersPresenter(ICustomersView view, IDomainDAO<ICustomer> model)
{
Check.IsNotNull(view, "view cannot be null");
Check.IsNotNull(model, "model cannot be null");
this.view = view;
this.model = model;
this.view.OnViewLoad += new EventHandler<SingleValueEventArgs<bool>>(OnViewLoadListener);
this.view.RequestCustomerDetails += new EventHandler<SingleValueEventArgs<string>>(RequestCustomerDetailsListener);
this.view.RequestCustomerEdit += new EventHandler<SingleValueEventArgs<string>>(RequestCustomerEditListener);
}
#region View Event Listeners
private void OnViewLoadListener(object sender, SingleValueEventArgs<bool> isPostBack)
{
if (!isPostBack.Value)
{
// Set the view for the first time
view.SetCustomers(model.FetchAllByName(true));
}
// Set this date on teh view every time
view.SetRefreshTime(DateTime.Now);
}
private void RequestCustomerDetailsListener(object sender, SingleValueEventArgs<string> e)
{
// Set the view with updatd customer information
string customerID = e.Value;
ICustomer customer = model.FetchByID(customerID);
view.SetCustomerDetails(customer);
}
private void RequestCustomerEditListener(object sender, SingleValueEventArgs<string> e)
{
// Raise our event. The ASPX page should be listening, but there is no guarantee.
OnRequestCustomerEdit(e);
}
#endregion
#region Presenter Raise Events
/// <summary>
/// Raise the RequestCustomerEdit event by invoking
/// the delegates.
/// </summary>
public virtual void OnRequestCustomerEdit(SingleValueEventArgs<string> e)
{
EventHandler<SingleValueEventArgs<string>> eventHandler = RequestCustomerEdit;
if (eventHandler != null)
{
eventHandler(this, new SingleValueEventArgs<string>(e.Value));
}
}
#endregion
}
}
|
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.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.