我正在研究一种通用的方法,它可以做同样的事情(目前而言),但最终可能需要在将来进行扩展。
假设这个方法是在主页和产品页面中调用的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()移到一个公共类文件中,并在HomePage和ProductsPage上继承它。
class CommonMethods
{
public Products GetProducts(int count)
{
return apiProducts().Take(count).ToList();
}
}继承:
class HomePage : CommonMethods
class ProductsPage: CommonMethods但是,当我需要为产品页面上的特定目的修改GetProducts并且不想影响HomePage时,最好的方法是什么呢?我想避免破坏其他页面/s,因为我正在更改一个常见的方法。
我尝试了将GetProducts()变为虚拟的想法,并在ProductsPage上重写了该方法。这是可行的,但我仍然在想,如果有一个更好的方法在这里。有什么设计模式我可以考虑吗?
编辑:
我试图避免的主要问题是,通过使用一种通用方法,我不想在对这个GetProducts()进行更改时破坏主页和产品页面上的功能;
例如,在HomePage上,我只需要两个数据(ID和名称)
然后,在ProductsPage上,我想扩展返回的数据,比如价格、数量等等,下面是样例,但是我正在寻找一个更好的解决方案:
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();
}谢谢大家。
发布于 2020-02-13 23:42:55
继承并不总是解决问题的办法。有时像下面这样的简单帮手就能做到
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();
}
} 发布于 2020-02-13 23:40:33
我认为您只需要使用分解并将您的GetProducts方法移到另一个类。例如,ProductsRepository,那么您只需要使用构造函数注入将ProductsRepository注入到HomePage和ProductsPage类。如下所示:
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;
}
}https://stackoverflow.com/questions/60218040
复制相似问题