首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常用方法高效处理

问常用方法高效处理
EN

Stack Overflow用户
提问于 2020-02-13 23:34:40
回答 2查看 54关注 0票数 0

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

假设这个方法是在主页和产品页面中调用的GetProducts()。

所以我的代码是:

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
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上继承它。

代码语言:javascript
复制
class CommonMethods
{
   public Products GetProducts(int count)
   {
       return apiProducts().Take(count).ToList();
   }
}

继承:

代码语言:javascript
复制
class HomePage : CommonMethods 

class ProductsPage: CommonMethods

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

我尝试了将GetProducts()变为虚拟的想法,并在ProductsPage上重写了该方法。这是可行的,但我仍然在想,如果有一个更好的方法在这里。有什么设计模式我可以考虑吗?

编辑:

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

例如,在HomePage上,我只需要两个数据(ID和名称)

然后,在ProductsPage上,我想扩展返回的数据,比如价格、数量等等,下面是样例,但是我正在寻找一个更好的解决方案:

代码语言:javascript
复制
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();  
    }

谢谢大家。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-13 23:42:55

继承并不总是解决问题的办法。有时像下面这样的简单帮手就能做到

代码语言:javascript
复制
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();
    }
} 
票数 2
EN

Stack Overflow用户

发布于 2020-02-13 23:40:33

我认为您只需要使用分解并将您的GetProducts方法移到另一个类。例如,ProductsRepository,那么您只需要使用构造函数注入将ProductsRepository注入到HomePage和ProductsPage类。如下所示:

代码语言:javascript
复制
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;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60218040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档