是否可以从这三种方法中选择一种? (值得吗?)

问题描述 投票:0回答:1

我有这三种方法

public static void HtmlEncodeUserDetails(ProfileEditViewModel profileEditViewModel)
{
    HtmlEncodeUserDetailsByViewModel(profileEditViewModel);
    HtmlEncodeUserDetailsByViewModel(profileEditViewModel.BusinessInfoVm);
    HtmlEncodeUserDetailsByViewModel(profileEditViewModel.AddressVm);
}

public static void HtmlEncodeUserDetails(BillingPageViewModel billingPageViewModel)
{
    HtmlEncodeUserDetailsByViewModel(billingPageViewModel);
    HtmlEncodeUserDetailsByViewModel(billingPageViewModel.BusinessInfoVm);
    HtmlEncodeUserDetailsByViewModel(billingPageViewModel.AddressVm);
}

public static void HtmlEncodeUserDetails(OfflineSaleViewModel offlineSaleViewModel)
{
    HtmlEncodeUserDetailsByViewModel(offlineSaleViewModel);
    HtmlEncodeUserDetailsByViewModel(offlineSaleViewModel.BusinessInfoVm);
    HtmlEncodeUserDetailsByViewModel(offlineSaleViewModel.AddressVm);
}

有没有一种方法可以在不创建新视图模型的情况下制作一个而不是三个?

c# code-duplication
1个回答
0
投票

这三个模型类别有什么共同点?那应该是一个接口。例如:

public interface IHtmlEncodableViewModel
{
    IHtmlEncodableViewModel BusinessInfoVm {get; set;}
    IHtmlEncodableViewModel AddressVm {get; set;}
}

public class ProfileEditViewModel: IHtmlEncodableViewModel
{
    IHtmlEncodableViewModel BusinessInfoVm {get; set;}
    IHtmlEncodableViewModel AddressVm {get; set;}
}

public class BillingPageViewModel: IHtmlEncodableViewModel
{
    IHtmlEncodableViewModel BusinessInfoVm {get; set;}
    IHtmlEncodableViewModel AddressVm {get; set;}
}

public class OfflineSaleViewModel: IHtmlEncodableViewModel
{
    IHtmlEncodableViewModel BusinessInfoVm {get; set;}
    IHtmlEncodableViewModel AddressVm {get; set;}
}

public static void HtmlEncodeUserDetails(IHtmlEncodableViewModel viewModel)
{
    HtmlEncodeUserDetailsByViewModel(viewModel);
    HtmlEncodeUserDetailsByViewModel(viewModel.BusinessInfoVm);
    HtmlEncodeUserDetailsByViewModel(viewModel.AddressVm);
}

public static void HtmlEncodeUserDetailsByViewModel(IHtmlEncodableViewModel viewModel)
{
    // process
}
© www.soinside.com 2019 - 2024. All rights reserved.