常用方法高效处理



我正在研究一种通用方法,该方法(目前(可以做同样的事情,但最终可能需要将来扩展。

假设此方法GetProducts()在主页和产品页面中调用

。所以我的代码是这样的:

class HomePage
{
public List<BaseInfo> LoadHomePage()
{
List<BaseInfo> baseInfo = new List<BaseInfo>();
baseInfo.Add(GetProducts(5));
return baseInfo;
}
public Products GetProducts(int count)
{
return apiProducts().Take(count).ToList();
}
}

然后,在另一个类文件中:

class ProductsPage
{
public List<BaseInfo> LoadProductPage()
{
List<BaseInfo> baseInfo = new List<BaseInfo>();
baseInfo.Add(GetProducts(100));
return baseInfo;
}
public Products GetProducts(int count)
{
return apiProducts().Take(count).ToList();
}
}

现在,我想将此GetProducts()移动到一个通用类文件中,并在HomePageProductsPage上继承该文件。

class CommonMethods
{
public Products GetProducts(int count)
{
return apiProducts().Take(count).ToList();
}
}

遗产:

class HomePage : CommonMethods 
class ProductsPage: CommonMethods

但是,当我需要在产品页面上出于特定目的修改GetProducts并且不想影响HomePage时,最好的方法是什么?我想避免破坏其他页面,因为我正在更改一种常用方法。

我尝试了使GetProducts()虚拟并在ProductsPage上覆盖该方法的想法。那会起作用,但我仍在考虑这里是否有更好的方法。我可以考虑任何设计模式吗?

编辑:

我试图避免的主要问题是使用一种通用方法,当我对此GetProducts()进行更改时,我不想破坏主页和产品页面上的功能;

例如,在主页上,我只需要 2 个数据(ID 和名称(

然后在产品页面上,我想扩展返回的数据,比如价格、数量等。 下面的示例方法,但我正在寻找更好的解决方案:

public Products GetProducts(int count, string page)
{
if(page == "Home")
return apiProducts().Select(x => new Products { Id = x.id, Name = x.name, Name = x.name }).Take(count).ToList();  
elseif (page == "Products")  
return apiProducts().Select(x => new Products { Id = x.id, Name = x.name, Name = x.name, Price = x.price, Qty = x.qty }).Take(count).ToList();  
}

谢谢大家。

继承并不总是答案。有时像下面这样的简单助手就可以做到

internal static class ProductsHelper // -- STATIC
{
// generic method that will work for all products 
public static List<T> GetProducts<T>(IEnumerable<T> products, int count)
{
return products.Take(count).ToList();
}
} 

我认为你只需要使用分解并将你的GetProducts方法移动到另一个类。例如ProductsRepository然后,您只需要使用构造函数注入将ProductsRepository注入到HomePageProductsPage类。喜欢这个:

class ProductsPage
{
private ProductsRepository _rep;
public ProductsPage(ProductsRepository rep)
{
_rep=rep;
}
public List<BaseInfo> LoadProductPage()
{
List<BaseInfo> baseInfo = new List<BaseInfo>();
baseInfo.Add(_rep.GetProducts(100));
return baseInfo;
}
}

最新更新