Я работаю над общим методом, который делает то же самое (пока), но может в конечном итоге потребовать расширения в будущем.
Скажем, этот метод 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
для конкретной цели c на странице продукта и не хотите влиять на HomePage
, каков наилучший подход для этого? Я хочу не ломать другие страницы, потому что я меняю общий метод.
Я попробовал сделать виртуальный GetProducts()
и переопределить метод на ProductsPage
. Это сработало бы, но я все еще думаю, есть ли здесь лучший подход. Есть ли какие-то шаблоны проектирования, которые я могу рассмотреть?
РЕДАКТИРОВАТЬ:
Основная проблема, которую я пытаюсь избежать, заключается в использовании общего метода, я не хочу чтобы нарушить функциональность страниц домашней страницы и продуктов при внесении изменений в GetProducts()
;
Например, на HomePage мне нужны только 2 данные (ID и имя)
Затем ProductsPage, я хочу расширить возвращаемые данные, скажем, цена, кол-во и т. Д. c. Пример способа сделать ниже, но я ищу лучшее решение:
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();
}
Спасибо всем.