Иногда так случается, что хочется сменить работу. В таком случае, у нас есть несколько вариантов:

  1. Потребовать прибавки, чтобы получить дополнительную мотивацию работать
  2. Потребовать отпуск, чтобы отдохнуть от надоевших задач и набраться сил.
  3. Сменить работу, выложив резюме, в надежде, что Вы получите предложение, которое будет Вас удовлетворять.

Если Вы все таки выбрали 3й вариант, то Вы поступили, как я. И я получил предложение мечты: родной стек(последнее время, я был вынужден сменить любимый C#, на php, так ещё и bitrix framework), финтех и с прибавкой к зарплате. Конечно же, первый делом, я решил подновить знания. Этот текст — это в первую очередь, моя шпаргалка, составленная с текста вакансии на должность Middle .NET Engineer моей мечты.

ORM — Entity Framework / NHibernate


Entity framework и NHibernate — это фреймворки, которые используют технологию ORM(объектно-ориентировочного отображения(маппинга)для сопоставления объектов(классов) с таблицами в БД. То есть ORM, условно, прослойка между кодом и базой данных, которая позволяет созданые в программе объекты складывать/получать в/из бд.

Плюсы EF


  • Позволяет создать таблицу кодом или же используя EF Designer и сгенерировать новую базу данных
  • Вы можете «автоматизировать» создание объектов, а так же отслеживать изменения этих объектов, чем упростить процес обновления базы данных
  • Использование единого синтаксиса(LINQ) для любых коллекций объектов, будь то данные из БД, или просто список; он достаточно быстр, при правильном использовании, а так же в меру лаконичен.
  • EF может заменить огромные куски кода, которые Вы бы писали самостоятельно.
  • Сокращает время разработки.
  • Поддерживает асинхронные операции с базами данных.

Минусы EF


  • Использование «нетрадиционного» подхода обработки данных, доступного не с каждой базой данных.
  • При любом изменении в схеме БД, EF откажется работать; потребуются изменения в коде.
  • SQL-код генерируются в некотролируемом виде, мы должны доверять разработчикам самого EF.
  • Слабо подходит для больших доменных моделей.

Плюсы NHibernate


  • Большие возможности маппинга.
  • Поддержка кэша второго уровня.
  • Отличная реализация Unit Of Work.
  • Вы можете использовать почти любую базу данных.
  • Очень популярный в корпоративной среде.
  • Поддерживает различные стратегии генерации идентификаторов из базы данных.

Минусы NHibernate


  • Большое время подготовки метаданных.
  • Написание сопоставления, может быть очень утомительным, ведь XML — не самый дружелюбный язык.
  • Сложен в освоении, так как сложен сам процес поиска документации.

Writing unit tests frameworks


Юнит-тесты позволяют быстро и автоматически протестировать отдельные компоненты приложения независимо от остальной его части. Не всегда юнит-тесты могут покрыть весь код приложения, но тем не менее они позволяют существенно уменьшить количество ошибок уже на этапе разработки.

Популярные фрейморки:

  • xUnit.net
  • MS Test
  • NUnit

Начиная с Visual Studio 2019 специально для тестов были добавлены три типа проектов: xUnit Test Project(.NET Core), MSTest Test Project(.NET Core) и NUnit Test Project(.NET Core)

Я буду рассматривать xUnit

Тесты в xUnit определяются в виде методов, к которым применяются атрибуты Fact, Theory.
Fact- это отдельный тест, у которого нет параметров. Theory — тест, принимающий параметры, может иметь несколько сценариев.

Пример
[Fact]
    public void Should_do_somthing(){...}

    [Theory]
    [InlineData(20, 180, 80, ”good”)]
    [InlineData(20, 180, 50, ”bad”)]
    public void Should_measure_weight(int age, int height, decimal weight, string expected){...}


Существует целая парадиграма тестирования, которую xUnit реализует в полной мере: Arrange-Act-Assert.

  • Arrange: устанавливает начальные условия для выполнения теста
  • Act: выполняет тест (обычно представляет одну строку кода)
  • Assert: верифицирует результат теста

Arrange и Act — это обычный код на C#, а Assert — это отдельный класс с набором статических методов для проверки результатов.

Основные методы
  • All(collection, action): метод подтверждает, что все элементы коллекции collection соответствуют действию action
  • Contains(expectedSubString, actualString): метод подтверждает, что строка actualString содержит expectedSubString
  • DoesNotContain(expectedSubString, actualString): метод подтверждает, что строка actualString не содержит строку expectedSubString
  • DoesNotMatch(expectedRegexPattern, actualString): метод подтверждает, что строка actualString не соответствует регулярному выражению expectedRegexPattern
  • Matches(expectedRegexPattern, actualString): метод подтверждает, что строка actualString соответствует регулярному выражению expectedRegexPattern
  • Equal(expected, result): метод сравнивает результат теста в виде значения result и ожидаемое значение expected и подтверждает их равенство
  • NotEqual(expected, result): метод сравнивает результат теста в виде значения result и ожидаемое значение expected и подтверждает их неравенство
  • Empty(collection): метод подтверждает, что коллекция collection пустая
  • NotEmpty(collection): метод подтверждает, что коллекция collection не пустая
  • True(result): метод подтверждает, что результат теста равен true
  • False(result): метод подтверждает, что результат теста равен false
  • IsType(expected, result): метод подтверждает, что результат теста имеет тип expected
  • IsNotType(expected, result): метод подтверждает, что результат теста не представляет тип expected
  • IsNull(result): метод подтверждает, что результат теста имеет значение null
  • IsNotNull(result): метод подтверждает, что результат теста не равен null
  • InRange(result, low, high): метод подтверждает, что результат теста находится в диапазоне между low и high
  • NotInRange(result, low, high): метод подтверждает, что результат теста не принадлежит диапазону от low до high
  • Same(expected, actual): метод подтверждает, что ссылки expected и actual указывают на один и тот же объект в памяти
  • NotSame(expected, actual): метод подтверждает, что ссылки expected и actual указывают на разные объекты в памяти
  • Throws(exception, expression): метод подтверждает, что выражение expression генерирует исключение exception


Таким образом, мы прошли 2 из 7 пунктов резюме.

В следующей части:

  • DI frameworks
  • Application designs understanding (n-Tier, Onion).

Спасибо, что дочитали, таким образом, я понимаю, что не один я готовлюсь к чему-либо ;)

Материалы: раз, два, три