Реализация интерейсов хранилищ.

This commit is contained in:
Programmist73 2023-02-11 00:07:41 +04:00
parent cdcdfa9709
commit b93d5ff13f
7 changed files with 461 additions and 2 deletions

View File

@ -6,4 +6,9 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopDataModels\BlacksmithWorkshopDataModels.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,41 @@
using BlacksmithWorkshopListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement
{
//класс для списков, в которых будет храниться информация при работе приложения
public class DataListSingleton
{
private static DataListSingleton? _instance;
//список для хранения заготовок
public List<WorkPiece> WorkPieces { get; set; }
//список для хранения изделий
public List<Article> Articles { get; set; }
//список для хранения заказов
public List<Order> Orders { get; set; }
public DataListSingleton()
{
WorkPieces = new List<WorkPiece>();
Articles = new List<Article>();
Orders = new List<Order>();
}
public static DataListSingleton GetInstance()
{
if(_instance == null)
{
_instance = new DataListSingleton();
}
return _instance;
}
}
}

View File

@ -0,0 +1,138 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища изделий
public class ArticleStorage : IArticleStorage
{
//поле для работы со списком изделий
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public ArticleStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка изделий
public List<ArticleViewModel> GetFullList()
{
var result = new List<ArticleViewModel>();
foreach(var article in _source.Articles)
{
result.Add(article.GetViewModel);
}
return result;
}
//получение отфильтрованного списка изделий
public List<ArticleViewModel> GetFilteredList(ArticleSearchModel model)
{
var result = new List<ArticleViewModel>();
if (string.IsNullOrEmpty(model.ArticleName))
{
return result;
}
foreach(var article in _source.Articles)
{
if(article.ArticleName.Contains(model.ArticleName))
{
result.Add(article.GetViewModel);
}
}
return result;
}
//получение элемента из списка изделий
public ArticleViewModel? GetElement(ArticleSearchModel model)
{
if(string.IsNullOrEmpty(model.ArticleName) && !model.Id.HasValue)
{
return null;
}
foreach(var article in _source.Articles)
{
if((!string.IsNullOrEmpty(model.ArticleName) && article.ArticleName == model.ArticleName) ||
(model.Id.HasValue && article.Id == model.Id))
{
return article.GetViewModel;
}
}
return null;
}
//при создании изделия определяем для него новый id: ищем max id и прибавлляем к нему 1
public ArticleViewModel? Insert(ArticleBindingModel model)
{
model.Id = 1;
foreach(var article in _source.Articles)
{
if(model.Id <= article.Id)
{
model.Id = article.Id + 1;
}
}
var newArticle = Article.Create(model);
if(newArticle == null)
{
return null;
}
_source.Articles.Add(newArticle);
return newArticle.GetViewModel;
}
//обновление изделия
public ArticleViewModel? Update(ArticleBindingModel model)
{
foreach (var article in _source.Articles)
{
if (article.Id == model.Id)
{
article.Update(model);
return article.GetViewModel;
}
}
return null;
}
//удаление изделия
public ArticleViewModel? Delete(ArticleBindingModel model)
{
for(int i = 0; i < _source.Articles.Count; ++i)
{
if (_source.Articles[i].Id == model.Id)
{
var element = _source.Articles[i];
_source.Articles.RemoveAt(i);
return element.GetViewModel;
}
}
return null;
}
}
}

View File

@ -0,0 +1,137 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища заказов
public class OrderStorage : IOrderStorage
{
//поле для работы со списком заказов
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public OrderStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка заготовок
public List<OrderViewModel> GetFullList()
{
var result = new List<OrderViewModel>();
foreach (var order in _source.Orders)
{
result.Add(order.GetViewModel);
}
return result;
}
//получение отфильтрованного списка заказов
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
var result = new List<OrderViewModel>();
if (!model.Id.HasValue)
{
return result;
}
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
result.Add(order.GetViewModel);
}
}
return result;
}
//получение элемента из списка заказов
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
foreach (var order in _source.Orders)
{
if (model.Id.HasValue && order.Id == model.Id)
{
return order.GetViewModel;
}
}
return null;
}
//при создании заказа определяем для него новый id: ищем max id и прибавляем к нему 1
public OrderViewModel? Insert(OrderBindingModel model)
{
model.Id = 1;
foreach (var order in _source.Orders)
{
if (model.Id <= order.Id)
{
model.Id = order.Id + 1;
}
}
var newOrder = Order.Create(model);
if (newOrder == null)
{
return null;
}
_source.Orders.Add(newOrder);
return newOrder.GetViewModel;
}
//обновление заказа
public OrderViewModel? Update(OrderBindingModel model)
{
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
order.Update(model);
return order.GetViewModel;
}
}
return null;
}
//удаление заказа
public OrderViewModel? Delete(OrderBindingModel model)
{
for (int i = 0; i < _source.Orders.Count; ++i)
{
if (_source.Orders[i].Id == model.Id)
{
var element = _source.Orders[i];
_source.Orders.RemoveAt(i);
return element.GetViewModel;
}
}
return null;
}
}
}

View File

@ -0,0 +1,138 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopListImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища заготовок
public class WorkPieceStorage : IWorkPieceStorage
{
//поле для работы со списком заготовок
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public WorkPieceStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка заготовок
public List<WorkPieceViewModel> GetFullList()
{
var result = new List<WorkPieceViewModel>();
foreach(var workPiece in _source.WorkPieces)
{
result.Add(workPiece.GetViewModel);
}
return result;
}
//получение отфильтрованного списка заготовок
public List<WorkPieceViewModel> GetFilteredList(WorkPieceSearchModel model)
{
var result = new List<WorkPieceViewModel>();
if(string.IsNullOrEmpty(model.WorkPieceName))
{
return result;
}
foreach(var workPiece in _source.WorkPieces)
{
if (workPiece.WorkPieceName.Contains(model.WorkPieceName))
{
result.Add(workPiece.GetViewModel);
}
}
return result;
}
//получение элемента из списка заготовок
public WorkPieceViewModel? GetElement(WorkPieceSearchModel model)
{
if(string.IsNullOrEmpty(model.WorkPieceName) && !model.Id.HasValue)
{
return null;
}
foreach(var workPiece in _source.WorkPieces)
{
if((!string.IsNullOrEmpty(model.WorkPieceName) && workPiece.WorkPieceName == model.WorkPieceName) ||
(model.Id.HasValue && workPiece.Id == model.Id))
{
return workPiece.GetViewModel;
}
}
return null;
}
//при создании заготовки определяем для него новый id: ищем max id и прибавляем к нему 1
public WorkPieceViewModel? Insert(WorkPieceBindingModel model)
{
model.Id = 1;
foreach(var workPiece in _source.WorkPieces)
{
if(model.Id <= workPiece.Id)
{
model.Id = workPiece.Id + 1;
}
}
var newWorkPiece = WorkPiece.Create(model);
if(newWorkPiece == null)
{
return null;
}
_source.WorkPieces.Add(newWorkPiece);
return newWorkPiece.GetViewModel;
}
//обновление заготовки
public WorkPieceViewModel? Update(WorkPieceBindingModel model)
{
foreach(var workPiece in _source.WorkPieces)
{
if(workPiece.Id == model.Id)
{
workPiece.Update(model);
return workPiece.GetViewModel;
}
}
return null;
}
//удаление заготовки
public WorkPieceViewModel? Delete(WorkPieceBindingModel model)
{
for(int i = 0; i < _source.WorkPieces.Count; ++i)
{
if (_source.WorkPieces[i].Id == model.Id)
{
var element = _source.WorkPieces[i];
_source.WorkPieces.RemoveAt(i);
return element.GetViewModel;
}
}
return null;
}
}
}

View File

@ -52,7 +52,7 @@ namespace BlacksmithWorkshopListImplement.Models
}
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public ArticleViewModel GetViewModel() => new()
public ArticleViewModel GetViewModel => new()
{
Id = Id,
ArticleName = ArticleName,

View File

@ -64,7 +64,7 @@ namespace BlacksmithWorkshopListImplement.Models
}
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public OrderViewModel GetViewModel() => new()
public OrderViewModel GetViewModel => new()
{
ArticleId = ArticleId,
Count = Count,