首页 > 解决方案 > 如何避免不得不继续提出论点?

问题描述

我正在编写一个简单的 MVC 模式。我的视图实现了一个简单的界面。

public interface IComponentView
{
    void Render(ComponentModel componentModel);
}

这里的 ComponentModel 是一个抽象模型类。控制器负责准备新的组件模型并在传递新模型时调用视图的 Render() 方法。正如您可以想象的那样,视图在它自己的 Render() 函数中所做的第一件事是将接收到的父类 ComponentModel 向下转换为其适当的子类模型,以便视图可以使用所有属性等进行渲染。这是一个例子。

public SpecialMenuView : IComponentView 
{
    ...
    public void Render(ComponentModel componentModel)
    {
        SpecialMenuModel model = (SpecialMenuModel)componentModel;
        // use model to render stuff
    }
    ...
}

有没有更好的方法来做到这一点,而不是继续为我拥有的每个 UI 组件进行强制转换?

标签: c#

解决方案


我不知道你用这个接口做什么,但是如果你想传递类型信息,为什么不使用泛型呢?

public interface IComponentView<TModel> where TModel : ComponentModel
{
    void Render(TModel componentModel);
}
public SpecialMenuView : IComponentView<SpecialMenuModel>
{
    ...
    public void Render(SpecialMenuModel componentModel)
    {
        // use model to render stuff
    }
    ...
}

您可以使该界面逆变以获得奖励积分。


推荐阅读