技术开发 频道

MVC模式结合Mediator模式的运用

   Marlon实现的MVC+M模式有效地解除了Controller对象之间的耦合关系,其中,他引入了IColleague接口对Controller的相关方法进行了抽象。不过,这样的接口并非必须,正如我在《Strategy模式与Delegate委托》一文中提到的接口与委托之间的关系,我们完全可以用委托来代替IColleague接口的定义,使整个结构变得更加的灵活。由于引入了委托与消息对象的映射关系,因此在Controller类的MessageNotification()方法中,不再需要用switch语句来判断消息的值,而是直接根据映射关系,调用委托对象所指代的方法逻辑。Mediator类可以修改为:

public class Mediator
{
    IDictionary
<string,Action<object>> m_List = new Dictionary<string,Action<object>>();

    
public void Register(string message,Action<object> callback)
    {
        m_List.Add(message,callback);
    }

    
public void NotifyColleagues(string message, object args)
    {
        
if (m_List.ContainsKey(message))
        {
            m_List[message](args);
        }
    }
}

 


   与之对应的,FileSelectorController可以修改为:

public FileSelectorController()
{
    Mediator.Register(Messages.DirectorySelectedChanged,
        (obj)
=>
        {
            LoadFiles((DirectoryDisplayItem)obj);
        });
}

   至于最初定义在Controller类的MessageNotification()方法,则被匿名函数所代替,已经不再需要了。

0
相关文章