Omgdev.Util.ShapeLibrary
1.0.0
dotnet add package Omgdev.Util.ShapeLibrary --version 1.0.0
NuGet\Install-Package Omgdev.Util.ShapeLibrary -Version 1.0.0
<PackageReference Include="Omgdev.Util.ShapeLibrary" Version="1.0.0" />
<PackageVersion Include="Omgdev.Util.ShapeLibrary" Version="1.0.0" />
<PackageReference Include="Omgdev.Util.ShapeLibrary" />
paket add Omgdev.Util.ShapeLibrary --version 1.0.0
#r "nuget: Omgdev.Util.ShapeLibrary, 1.0.0"
#:package Omgdev.Util.ShapeLibrary@1.0.0
#addin nuget:?package=Omgdev.Util.ShapeLibrary&version=1.0.0
#tool nuget:?package=Omgdev.Util.ShapeLibrary&version=1.0.0
Тестовое задание на позицию C# Developer Middle в Mindbox
Задание:
Напишите на C# библиотеку для поставки внешним клиентам, которая умеет вычислять площадь круга по радиусу и треугольника по трем сторонам. Дополнительно к работоспособности оценим:
- Юнит-тесты
- Легкость добавления других фигур
- Вычисление площади фигуры без знания типа фигуры в compile-time
- Проверку на то, является ли треугольник прямоугольным
В базе данных MS SQL Server есть продукты и категории. Одному продукту может соответствовать много категорий, в одной категории может быть много продуктов. Напишите SQL запрос для выбора всех пар «Имя продукта – Имя категории». Если у продукта нет категорий, то его имя все равно должно выводиться.
Что сделано
Реализована библиотека ShapeLibrary, которая содержит классы Circle, Triangle и нтерфейс IShape.
Документация в коде.
Unit-тесты реализованы с ипользованием фреймворка xUnit и располагаются в проекте ShapeLibrary.Tests. Файлы CircleTests.cs и TriangleTests.cs соответственно.
Пример использования находится в проекте Example
Библиотека собрана в NuGet пакет, опубликована и доступна по ссылке.
Решения
Вычисление площади фигуры без знания типа фигуры в compile-time
Я предположил, что необходимо определить универсальный для всех фигур интерфейс, который позволит вычислять площадь без занания конкретного типа. Для этого был создан интерфейс IShape с методом CalculateArea(), который возвращает площадь фигуры типа double.
Предположим, что инициализация объектов фигур происходит где-то вне пользовательского кода. Пользователь получет сериализованные фигуры по сети при помощи клиенского интерфейса, в котором реализован метод IEnumerable<IShape> GetShapes().
Пример:
double sum = 0;
IEnumerable<IShape> shapes = client.GetShapes();
// Находим сумму площадей всех полученных фигур
foreach(var shape in shapes)
{
sum += shape.CalculateArea();
}
sum = 0;
// Или с помощью LINQ
sum = shapes.Sum(s => s.CalculateArea());;
Добавление новых фигур
Необходимо добавить класс, реализующий метод CalculateArea() интерфейса IShape.
Пример
class Rectangle : IShape
{
public double Width { get; }
public double Height { get; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public double CalculateArea()
{
return Width * Height;
}
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 200 | 10/14/2024 |