2016-11-11 59 views
1

我有以下类:重构一个它可以处理多种类型的方法?

public class Disciplines 
{ 
    public int Id { get; set; } 
    public string Discipline { get; set; } 
    public bool IsChecked { get; set; } 
} 

我的项目有使用类的形式来创建一个复选框组几个视图模型:

public List<Disciplines> DisciplinesCBG { get; set; } 

我节省的复选框以选择该数据库为逗号分隔字符串,然后分裂的逗号的字符串重新显示为复选框:

public static UserProfileViewModel DisciplinesStringToCheckboxGroup(UserProfileViewModel model) 
{ 
    string[] disciplineArray = model.Disciplines.Split(','); 
    for (int i = 0; i < model.DisciplinesCBG.Count; i++) 
    { 
     string currentValue = model.DisciplinesCBG[i].Discipline; 
     if(Array.IndexOf(disciplineArray, currentValue) > -1) 
     { 
      model.DisciplinesCBG[i].IsChecked = true; 
     } 
    } 
    return model; 
} 

我的问题是,浩w除了UserProfileViewModel之外,我还可以编写可用于其他ViewModel类型的方法吗?例如,我有一个名为RegisterViewModel的视图模型,它使用与public List<Disciplines> DisciplinesCBG { get; set; }相同的public List<Disciplines> DisciplinesCBG { get; set; },我希望能够使用与上述相同的方法,而不必复制它并更改签名。我假设这是可能的?

回答

3

您可以创建一个接口,该接口具有DisciplinesDisciplinesCBG属性,然后在要应用的每个类中实现它。

interface IHasDiciplines 
{ 
    string Disciplines { get; set; } 
    List<Disciplines> DisciplinesCBG { get; set; } 
} 

class UserProfileViewModel : IHasDiciplines 
{ 
    public string Disciplines { get; set; } 
    public List<Disciplines> DisciplinesCBG { get; set; } 
} 

public static IHasDiciplines DisciplinesStringToCheckboxGroup(IHasDiciplines model) 
{ 
    string[] disciplineArray = model.Disciplines.Split(','); 
    for (int i = 0; i < model.DisciplinesCBG.Count; i++) 
    { 
     string currentValue = model.DisciplinesCBG[i].Discipline; 
     if(Array.IndexOf(disciplineArray, currentValue) > -1) 
     { 
      model.DisciplinesCBG[i].IsChecked = true; 
     } 
    } 
    return model; 
} 
+0

您的最后一种方法也可以是扩展方法。不确定一个简单的基类在这种情况下不会比接口更好。 – BradleyDotNET

+0

@BradleyDotNET它也可以是一个BaseClass,但如果以后你需要添加'HasFoo','HasBar','HasSomething',它会变得复杂。 –

+0

当然,在这一点上宁愿组成继承似乎成为一个主要因素。不是说接口是错误的*,而是“IHaveSomething”的接口有点红旗 – BradleyDotNET

相关问题