Is it possible to make one method out of these three?

77 Views Asked by At

I have these three methods

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);
}

Is there a way to make one rather than three without creating a new View Model?

1

There are 1 best solutions below

0
Tim Schmelter On

What do all three model-classes have in common? That should be an interface. For example:

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
}