格式化辅助方法是否属于模型,视图模型或单独的类?

时间:2013-10-02 20:29:52

标签: c# asp.net-mvc

我有一个存储公司信息的模型,包括税号。在美国,这些是9位数字,通常显示为## - #######。但是,在我的系统中,我将这些字符串存储为没有连字符的字符串 - 因为其他国家/地区的长度和格式可能不同,我不希望仅限于美国标准。

现在我想对我的观点进行编程,以便以“友好”的格式显示美国税号。我现在正在使用我在公司模型类中放置的辅助方法:

public string FormatTaxID(string TaxID)
{
    if (Address.Country == "United States")
        return Regex.Replace(TaxID, @"(\d{2})(\d{7})", "$1-$2");
    else
        return TaxID;
}

然后在我看来,我正在使用:

@item.FormatTaxID(item.TaxID)

这一切都很好,但是在模型中存储这样的方法感觉不对 - 感觉这更像是视图/视图模型的责任而不是模型的责任,因为它仅用于演示。

我正在使用视图模型并考虑将它放在那里,但我有基础模型的多个视图模型,如果我不需要,不想重复代码。此外,我的索引视图模型使用集合,我不知道如何将方法用于它:

public class CompanyIndexViewModel
{
    public IEnumerable<Company> Companies { get; set; }
    public IEnumerable<Document> Documents { get; set; }
}

我如何将此方法应用于这样的集合?

另一个选择是创建一个新的帮助器/实用程序类并将其粘贴在那里。 MVC惯例要求什么?

2 个答案:

答案 0 :(得分:3)

对于一次性,我会说使用视图模型。如果它是您将一遍又一遍地重复使用的东西,请将其移动到您的视图/视图模型/等的实用程序类中。可以参考。

而且,从技术上讲,两种方式都没有错。将该方法放在实用程序类中,然后将属性添加到返回此属性的视图模型中,例如:

public class CompanyIndexViewModel
{
    ...
    public string TaxID { get; set; }

    public string USFormattedTaxID
    {
        get { return Utilities.FormatTaxID(TaxID); }
    }
}

答案 1 :(得分:1)

公司的本地化到公司背景的TaxID恰好是公司的财产,而不是演示细节。

相关问题