Шаблон проектирования для загрузки данных от другого поставщика или локальной базы данных - .NET C# [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Шаблон проектирования для загрузки данных от другого поставщика или локальной базы данных - .NET C# [закрыто]

Сообщение Anonymous »

Я только что выполнил задачу по кодированию, связанную с рефакторингом метода для устаревшей системы, не нарушая при этом текущую систему, которая используется многими пользователями и которая должна применять принцип SOLID. Я не выиграл испытания, но хотел бы узнать, что можно улучшить.
Обратите внимание, что для всех случаев требуется модульный тест, а это C# без начального класса. У меня есть только
  • ItemService.cs
  • VendorReviewRepository.cs
  • OurLocalBranchDataDB .cs
  • OurOverseasDataDB.cs
  • OverseasVendorDataDB.cs
  • и другие классы интерфейса.
Конечно, мы можем добавить любой класс и интерфейс, который нам нужен.
Но я **не думаю** что было бы неплохо добавить стартовый класс, поскольку перед нами стоят задачи, на которых мы должны сосредоточиться
GetItem(int itemId, bool isUrgent)

Класс InventoryService имеет метод GetItem.
public Order GetItem(int orderId, bool isUrgent)

Дело в исследовании
Это дешевле получить элементы от поставщиков и заставить их отправлять клиентам.
Но если мы получим срочный заказ, мы будем искать местный товар через нашу базу данных. Если заказ не срочный, мы получим его у поставщика, потому что на Дальнем Востоке дешевле получить товар у нашего поставщика. Однако отзывы о производителе ужасные. Мы постараемся получить его из нашего местного склада. Если на местном складе имеется менее 1000 запасов, мы получаем их из наших зарубежных запасов, которые мы предпочитаем зарезервировать для срочной доставки.
Метод GetItem извлекает элементы и возвращает их вызывающему объекту на основе следующая логика:
  • Если параметр isUrgent действителен, извлеките элемент из нашего локального инвентаря.

    Если это не срочно, система проверит, оправдал ли поставщик наши ожидания за последние три месяца, что неверно; у них не должно быть более трех отрицательных отзывов.
  • В противном случае попробуйте получить Товар из местного или нашего зарубежного инвентаря на основе запасы в локальном инвентаре
Ниже приведен мой код:
ItemService с Получить элемент
public ItemService(IVendorReviewRepository vendorReviewRepository, IDataAccess ourLocalBranchDataDB, IDataAccess ourOverseasDataDB, IDataAccess overseasVendorDataDB)
{
_vendorReviewRepository = vendorReviewRepository;
_ourLocalBranchDataDB = ourLocalBranchDataDB;
_ourOverseasDataDB = ourOverseasDataDB;
_overseasVendorDataDB = overseasVendorDataDB;
}

public async Task GetItem(int itemId, bool isUrgent)
{
if (isUrgent)
{
ItemDetail i = await _ourLocalBranchDataDB.LoadItemAsync(itemId); //local Branch
return i.ItemCode;
}
else
{
ItemDetail itemD = IsGoodVendor() ? await _overseasVendorDataDB.LoadItemAsync(itemId) : await _ourDB.LoadItemAsync(itemId);

if (itemD.HaveMoreThan1000Stock)
{
ItemDetail i = await _ourLocalBranchDataDB.LoadItemAsync(itemId); //local Branch
return i.ItemCode;
}
else
{
return itemD.ItemCode; // our overseas Branches
}
}
}

Все репозитории
public class OurLocalBranchDataDB : IDataAccess
{
public async Task LoadItemAsync(int id)
{
return ...;
}
}

public class OurLocalBranchDataDB : IDataAccess
{
public async Task LoadItemAsync(int id)
{
return ...;
}
}

public class OurOverseasDataDB : IDataAccess
{
public async Task LoadItemAsync(int id)
{
return ...;
}
}

public class OverseasVendorDataDB : IDataAccess
{
public async Task LoadItemAsync(int id)
{
return ...;
}
}

private bool IsGoodVendor() {

var badReviews = _vendorReviewRepository.GetBadReviews();

return ReviewHelper.IsBadVendor(badReviews.ToList());
}

Проведите рефакторинг кода в методе GetItem с помощью SOLID и простоты обслуживания
Что еще я могу улучшить для приведенного ниже метода?
У меня такое ощущение, что я могу больше, поскольку все...DataDB унаследована от IDataAccess
public Order GetItem(int orderId, bool isUrgent)


Подробнее здесь: https://stackoverflow.com/questions/785 ... et-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»