Получи случайную криптовалюту за регистрацию!

.NET Разработчик

Логотип телеграм канала @netdeveloperdiary — .NET Разработчик N
Логотип телеграм канала @netdeveloperdiary — .NET Разработчик
Адрес канала: @netdeveloperdiary
Категории: Технологии
Язык: Русский
Количество подписчиков: 3.24K
Описание канала:

Дневник сертифицированного .NET разработчика.
Для связи: @SBenzenko
Поддержать канал: https://pay.cloudtips.ru/p/70df3b3b

Рейтинги и Отзывы

3.67

3 отзыва

Оценить канал netdeveloperdiary и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

2

4 звезд

0

3 звезд

0

2 звезд

0

1 звезд

1


Последние сообщения 7

2022-05-25 08:29:48 День 1211. #ЗаметкиНаПолях
SQL Последовательности для Создания Уникальных Значений
Для создания уникального номера, например заказа в системе продаж, вы можете:
- использовать автогенерацию первичного ключа из базы данных,
- выбирать максимальный номер заказа из базы и добавлять единицу,
- использовать свой код, генерирующий уникальные числа.
– использовать SQL-последовательность.

Последовательность (sequence) - простой и эффективный способ создания уникальных упорядоченных значений потокобезопасным способом.

SQL код для создания очень прост:
CREATE SEQUENCE TestSeq
START WITH 1
INCREMENT BY 1

Начальный номер и число инкремента могут быть любыми.
Выбрать следующее значение можно так:
SELECT NEXT VALUE FOR TestSeq

Entity Framework также поддерживает последовательности… ну, более-менее. Создать последовательность можно в OnModelCreating вашего DbContext:
protected override void OnModelCreating(ModelBuilder mb)
{
mb.HasSequence("TestSeq",
x => x.StartsAt(1000).IncrementsBy(2));


А вот простого метода получения следующего значения нет. Большинство документации сводится к использованию значения по умолчанию через вот такую конструкцию:
mb.Entity()
.Property(o => o.OrderNo)
.HasDefaultValueSql("NEXT VALUE FOR TestSeq");

Ограничения
При принятии решения об использовании последовательностей, необходимо иметь в виду некоторые их ограничения:
1. Когда вы запрашиваете число, независимо от того, что происходит с этого момента, последовательность увеличивается. Последовательности не являются частью транзакций. Если вы откатите транзакцию с выбранным числом последовательности, это число «потеряется».

2. Последовательности не могут быть «разделены» каким-либо образом. Если вам требуется генерировать уникальные номера в течение года, а с 1 января «сбрасывать» нумерацию, вы не сможете создать заказ «задним числом». 1 января последовательность сбросится, и получить номер для заказа от 31 декабря прошлого года не удастся. Вариант решения – иметь несколько последовательностей на текущий год и несколько предыдущих, в которых ещё требуется продолжать нумерацию.

3. Аналогично если нескольким потребителям требуется отдельная нумерация, для каждого придётся создать свою последовательность.

Итого
Последовательности хороши, когда вам нужно приращение на одно и то же число для вашей базы данных с одним потребителем. Для более сложного функционала придётся придумывать что-то нестандартное или иметь дело с управлением несколькими последовательностями одновременно и выбором правильной в нужное время с помощью бизнес-логики.

Источник: https://dotnetcoretutorials.com/2022/03/22/using-sql-server-sequences-to-generate-unique-values/
713 views05:29
Открыть/Комментировать
2022-05-24 07:28:07 День 1210. #ЧтоНовенького
Централизованное Управление Пакетами
Управление зависимостями — основная функция NuGet. В одном проекте это может быть просто, а в многопроектных решениях могут возникать трудности. Если вы управляете общими зависимостями для нескольких различных проектов, теперь можно использовать функции централизованного управления пакетами NuGet.

Исторически зависимости пакетов NuGet управлялись в двух основных местах:
- packages.config – XML-файл, используемый в старых типах проектов для хранения списка пакетов, на которые ссылается проект,
- — элемент XML, используемый в новых типах проектов, который управляет зависимостями NuGet непосредственно в файлах проекта.

Начиная с NuGet 6.2, вы можете централизованно управлять своими зависимостями в своих проектах, добавив файл Directory.Packages.props. Функционал доступен во всех последних версиях инструментов разработки.

Создайте файл Directory.Packages.props в корне решения и установите ManagePackageVersionsCentrally в true. Далее вы можете определять версии пакетов, необходимых для вашего решения:


true






В проектах решения используйте тот же синтаксис для ссылок на пакеты, но без атрибута Version (можно переопределить версию в конкретном проекте с помощью атрибута VersionOverride):


net6.0







Для простоты для каждого проекта оценивается только один файл Directory.Packages.props. Если в вашем репозитории их несколько, будет выбран файл, ближайший к каталогу вашего проекта.

Предупреждение
При использовании централизованного управления пакетами вы увидите предупреждение NU1507, если в вашей конфигурации определено более одного источника пакетов. Чтобы это исправить, добавьте файл nuget.config в корень проекта с сопоставлением источников пакетов:














Можно добавить дополнительные источники и конфигурацию при необходимости. См. подробнее тут

Замечание
В Visual Studio 2022 возникает проблема при обновлении пакетов через NuGet Package Manager. После обновления меняется версия пакета в файле .csproj проекта (добавляется атрибут Version="…", вместо обновления его в файле Directory.Packages.props), что приводит к ошибке компиляции. Приходится исправлять это, вручную редактируя оба файла. Надеюсь, в будущем это исправят. Ишью им отправил :)

Источник: https://devblogs.microsoft.com/nuget/introducing-central-package-management/
527 views04:28
Открыть/Комментировать
2022-05-23 12:19:28
YourCodeReview

Стартап, который готовит IT-специалистов к собеседованиям, позволяет выявить слабые стороны и проходить собесы на все 100.

Вот, как вас оптимизируют менторы — HRы и Senior-программисты @YourCodeReview в рамках 4-недельной подготовки:

вместе разберёте свои ошибки, узнаете свои слабые места и получите гайд по исправлению
научитесь правильно себя презентовать и продавать
приведёте своё резюме в порядок вместе с Senior-разработчиком и HRом
получите фидбэк по тестовым
Самая крутая фича — пройдёте 4 собеседования с Senior-ом и HR

В итоге — станете готовы к собесу в любую компанию и узнаете, сколько реально стоите на рынке.

Установить программу обучения на свою HUMAN OS.

#реклама
781 viewsedited  09:19
Открыть/Комментировать
2022-05-23 08:56:18 День 1209. #ЗаметкиНаПолях
Полиморфизм в C#: Override и New
В чём разница между созданием виртуального/переопределяемого метода и простым сокрытием метода с помощью ключевого слова new в C#?

Во-первых, в отличие от переопределения, при использовании ключевого слова new вы можете изменить тип возвращаемого значения. Однако, это ещё не всё.

Допустим, у нас есть родительский класс и два потомка. Один потомок использует override, другой – new:
class Parent
{
public virtual void WhoAmI() =>
Console.WriteLine("Parent");
}

class Child : Parent
{
public override void WhoAmI() =>
Console.WriteLine("Child");
}

class ChildNew : Parent
{
public new void WhoAmI() =>
Console.WriteLine("ChildNew");
}

Тогда что выведет следующий код?
Parent child = new Child();
child.WhoAmI();

Parent childNew = new ChildNew();
childNew.WhoAmI();

На первый взгляд кажется, что в обоих случаях случае он выведет одно и то же. В конце концов, в обоих случаях производный тип приводится к родительскому. При таком кастинге важно учитывать, что объект «всегда помнит, кто он». То есть Child можно привести к Parent или даже к object, и он всё равно помнит, что он Child. Так что же выведет код выше?
Child
Parent

Итак, Child с переопределённым методом запомнил, кто он есть, и, следовательно, был вызван тот же метод WhoAmI(), но переопределённый. В случае с ChildNew… это не совсем так. На самом деле, если подумать, объяснение довольно простое. Когда вы используете ключевое слово override, оно переопределяет базовый класс, и между двумя методами существует своего рода «связь». То есть известно, что дочерний член является переопределением базового.

Когда вы используете ключевое слово new, вы говорите, что эти два метода никак не связаны между собой. И что ваш новый метод существует только в дочернем классе, но не в родительском. Между ними нет «связи». Поэтому при приведении к родительскому классу переопределённый метод известен, а «новый» метод — нет.

Ключевое слово new полезно в некоторых исключительных случаях, например, для переопределения (скрытия) методов сторонних библиотек. Однако, в своей иерархии наследования его использовать не стоит. Мало того, что для этого очень мало причин, так ещё и нарушается принцип подстановки Лисков.

Источник: https://dotnetcoretutorials.com/2022/05/13/override-vs-new-polymorphism-in-c-net/
763 views05:56
Открыть/Комментировать
2022-05-22 10:20:01 День 1208. #Карьера
Как Выработать Привычки и Сохранять Мотивацию. Продолжение
Начало

Как найти идеи
Часто я не чувствую вдохновения что-либо делать, потому что мне нечем заняться. У меня может быть много незавершённых дел, но я не задумывалась ни об одном из них, и потому они не кажутся интересными. Поэтому я просматриваю список дел и смотрю, не вдохновит ли меня что-то преодолеть прокрастинацию. Если нет, заглядываю в блоги по программированию в поисках интересных статей, которые вдохновят на работу. Если нет, ищу интересные треды в твиттере, курсы или обучающие видео на YouTube. Если ничего из этого не работает, это сигнал о том, что нужно расслабиться и уделить время себе. Сделать «творческую» паузу: погулять и послушать подкаст. Если во время перерыва что-то вдохновит на творчество, я запишу это.

Как строить график работы
Как только я выбираю дело, которое меня больше всего вдохновляет, я ставлю себе мягкий срок – часто две недели. Затем, двигаясь в обратную сторону от этого дедлайна, я отмечаю время в своём календаре для работы над ним. Я обычно расставляю в календаре интервалы в 1 час, если график плотный, и больше, если у меня есть больше времени. Как только график уложится в календаре, в выделенные часы я заставляю себя сесть и усердно потрудиться.

Как создать настроение
Создайте рабочую атмосферу, которая лучше подойдёт для вас. Здесь важно всё: звуки, запахи, вид.
Звук: звуки офиса, природы, фоновая музыка для работы или любимый плейлист.
Запах: согласитесь, запах еды не очень мотивирует к работе (хотя, кому как, наверное). Поэтому откройте окно, установите ароматизатор воздуха с любимым запахом и т.п. Найдите, что работает в вашем случае.
Вид: я чувствую мотивацию, когда кто-то ещё работает рядом или когда я на природе. Поэтому мой рабочий стол обращён к окну, из которого видны деревья, слышно шелест листьев и щебетание птиц. Либо на YouTube есть видео, где парень тоже работает, что вдохновляет меня на работу. Как вариант, можно пойти в кафе или парк.

Как избавиться от отвлекающих факторов
Это очень важно, потому что у меня концентрация золотой рыбки. Если есть шанс, я с удовольствием отвлекаюсь на твиттер, мессенджер или инстаграм. Поэтому, когда нужно сконцентрироваться, я отключаю звук на телефоне, закрываю почтовые приложения и все соцсети. Говорю себе, что следующие 45 минут я не буду смотреть в телефон, отвечать на emailы, заглядывать в твиттер и т.п.

Как добиться успеха
Если хотите, используйте «помидорный график». Когда всё готово, ставим таймер и начинаем печатать. Печатаем всё, что приходит в голову. Главное не красота контента или кода с первой попытки. Главное для начала – сдвинуть с мёртвой точки, привести всё в движение, заставить ваш разум выплеснуть идеи на страницу (на экран).

Не забывайте делать перерывы
Как только время таймера истекает, время сделать перерыв. Я заставляю себя встать, прогуляться, выйти на улицу, заварить новую чашку чая, выполнить поручение — что угодно, лишь бы это не было бездумным листанием твиттера или инстаграма. Это время, чтобы дать себе перерыв. Иногда, ближе к концу перерыва, можно проверить сообщения. Если вы никому не нужны :(, можно возвращаться к работе.

Итого
Чтобы сохранять мотивацию от сессии к сессии, важно знать, чего вы добились, на чём застряли и что нужно делать дальше. Для этого делайте заметки в конце сессий, как правило, пересматривая составленный ранее план: что сделано, какие есть открытые вопросы, что нужно сделать в следующей сессии, к кому можно обратиться за помощью.
И так цикл повторяется.

Источник: https://www.freecodecamp.org/news/create-a-habit-system-and-stay-motivated-as-a-developer/
Автор оригинала: Shruti Kapoor
656 views07:20
Открыть/Комментировать
2022-05-21 07:19:57 День 1207. #Карьера
Как Выработать Привычки и Сохранять Мотивацию. Начало
Вам бывало сложно работать над проектом? Бывали моменты, когда ничто не кажется захватывающим? В этом посте обсудим, что делать, когда у вас нет мотивации, и как справиться с прокрастинацией.

Мотивация проявляется по-разному. То как тяга что-то создавать, то как желание заняться спортом, то как просто рвение работать изо всех сил.

Признавайте и цените каждый вид мотивации. Пусть она охватит вас и приносит вам новые впечатления, радость и удовлетворение. Позвольте себе чувствовать себя мотивированным, потому что мотивация из одной формы перетекает в другую.

Когда ничего не мотивирует, займитесь любимым хобби. Используйте это время для снятия стресса. Не волнуйтесь о качестве того, что вы делаете, главное то, как вы себя чувствуете в данный момент. Даже если не чувствуете мотивации писать код, пусть будет мотивация рисовать или вырезать из дерева — это нормально! Попробуйте перенести это ощущение на следующий день.

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

Что такое система привычек и как её создать?
Это тщательно продуманный ежедневный набор привычек, которые приближают вас к цели. Что вам нужно сделать, как долго вам нужно это делать, какую атмосферу вы хотите создать, прежде чем делать то, что вам нужно сделать, и как вы приведёте себя в правильный ментальный настрой.

Как разработчик, подумайте, какие цели вы перед собой поставили? Например:
- На этой неделе: создать функционал для проекта.
- В этом месяце: изучить Blazor.
- В этом квартале: релиз проекта.
- В этом году: овладеть MAUI, выступить на конференции и писать в блог по одному посту каждый месяц.

Теперь подумайте, как разбить эти цели на задачи и к какому сроку вы надеетесь их выполнить. Двигаясь назад от этого дедлайна, посмотрите, какие задачи вы можете выполнить в краткосрочной перспективе для достижения этой цели.

Например:
Цель: создать функционал для проекта.
Срок: 1 неделя с сегодняшнего дня.
Шаги:
1. Исследовать, что необходимо: зависимости, активы, вовлечённые люди.
2. Разбить создание функционала на этапы.
3. Какие есть нерешённые вопросы?
4. Кто может помочь?
График:
День 1: Исследования
Дни 2-3: Разработка + тестирование
День 4: Сквозное тестирование + исправление ошибок.
День 5: Развёртывание в тестовой среде и подготовка к презентации.

Следующий шаг — «выделить» время для выполнения этих шагов в своём календаре. Посмотрите в свой календарь и выделите «периоды концентрации». Это время, когда вы будете выполнять эти задачи.

Далее создайте систему «настройки вашего ментального состояния». Изучите, что вам помогает концентрироваться на выполнении работы и делайте это перед необходимым «периодом концентрации».

Окончание следует…

Источник: https://www.freecodecamp.org/news/create-a-habit-system-and-stay-motivated-as-a-developer/
Автор оригинала: Shruti Kapoor
585 views04:19
Открыть/Комментировать
2022-05-20 07:40:13 День 1206. #ЗаметкиНаПолях
Упрощаем Работу с Данными
Если вы работаете с двоичными данными и используете byte[], можно упростить себе жизнь, используя класс BinaryData, который представляет собой облегчённую абстракцию для работы с двоичными данными, поддерживающую преобразование между строкой, потоком, JSON и байтами.

Замечание: Чтобы работать с классом BinaryData, нужно установить NuGet пакет System.Memory.Data.

Допустим, у нас есть следующий объект:
record Person(string FirstName, string LastName);
var person = new Person("John", "Smith");

Преобразуем в JSON-строку:
var personData = new BinaryData(person);
Console.WriteLine(personData.ToString());
// Вывод:
// {"FirstName":"John","LastName":"Smith"}

Преобразуем JSON в объект:
var person2 = personData.ToObjectFromJson();
Console.WriteLine(person2.ToString());
// Вывод (стандартный ToString для типа record):
// Person { FirstName = John, LastName = Smith }

Теперь рассмотрим работу со строками и двоичными данными:
var stringData = new BinaryData("Hello World!");

Преобразуем строку в массив байт:
byte[] bytes = stringData.ToArray();
var bytesData = new BinaryData(bytes);

Преобразуем массив байт в поток:
Stream stream = bytesData.ToStream();

Читаем из потока:
var streamData = BinaryData.FromStream(stream);
Console.WriteLine(streamData.ToString());
// Вывод:
// Hello World!

Источник: https://twitter.com/MarusykRoman/status/1521256457630535680
641 views04:40
Открыть/Комментировать
2022-05-19 09:11:03 День 1205. #ЗаметкиНаПолях
Профессиональное Документирование Кода
Все мы (надеюсь) документируем свои классы и методы с помощью XML комментариев , которые можно добавить с помощью тройного слеша (///) над заголовком метода/класса. Однако далеко не все используют все возможности этой документации, редко выходя за описание собственно элемента, параметров в и возврата в . Вот некоторые полезные теги, позволяющие сделать подсказки более информативными.

1. Секция
Добавит новый абзац текста после текста описания в summary, в котором можно указать дополнительную информацию. Кстати, можно добавить только один блок , остальные просто игнорируются. Однако можно разделить текст внутри на параграфы с помощью тега .

2. Секция
Позволяет описать исключения, которые может выбросить метод:
описание
Класс исключения должен быть доступен из текущего кода при компиляции.

3. Тег
Позволяет унаследовать описание из другого элемента (класса, интерфейса или метода).
- для класса наследует все описания всех членов.
- - позволяет указать, из какого члена унаследовать описание. Существующие теги на текущем члене не будут перезаписаны.
- - позволяет указать путь XPath к тегам, которые нужно унаследовать. Таким образом можно отфильтровывать ненужные или только нужные теги.

4. Тег
Позволяет в описании сослаться на параметр метода, выделив его в тексте: .

5. Тег
Позволяет добавить ссылку на другой объект или внешний источник в тексте.
- - ссылка на член или поле, доступное для вызова из текущей среды компиляции.
- - кликабельная ссылка на указанный URL. Например, GitHub создаёт кликабельную ссылку с текстом GitHub, которая ссылается на https://github.com.
- - ключевое слово языка, например true или одно из других допустимых ключевых слов. Кроме того, правильно отображает ключевое слово в подсказке (например, true в C# и True в VB).

6. Тег
Аналогично тегу позволяет добавлять кликабельные ссылки на другой объект или внешний источник в секции «См. также». Нельзя использовать внутри .

7. Тег
Позволяет ссылаться на комментарии в отдельном файле, описывающие типы и элементы в исходном коде:

Использование внешнего файла является альтернативой размещению документации непосредственно в файле исходного кода. Это позволяет применять систему управления версиями к документации отдельно от исходного кода. Один человек может менять файл исходного кода, а другой — файл документации.

Источник: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/xmldoc/recommended-tags
823 views06:11
Открыть/Комментировать
2022-05-18 10:27:30
Ограничение параметра типа "class" заставляет параметр типа...
#Quiz #CSharp
Anonymous Quiz
2%
быть абстрактным классом
14%
быть пользовательским классом
13%
иметь конструктор по умолчанию
69%
быть ссылочным типом
2%
быть типом значения
482 voters921 views07:27
Открыть/Комментировать
2022-05-18 08:56:03 День 1204.
В очередной раз неведомые алгоритмы ютуба подкинули мне интересное видео.
Sergei Calabonga рассказывает о собственном фреймворке Nimble Framework, предназначенном для быстрого создания микросервисов.





Фреймворк предоставляет готовые шаблоны проектов для микросервисов с авторизацией через OpenIddict (бесплатной альтернативой IdentityServer). Кстати, IdentityServer также можно использовать, изменив настройки. Подойдёт тем, кому часто приходится создавать микросервисы с авторизацией и постоянно прописывать одни и те же настройки.

Недавно Сергей выпустил версию 6.1 фреймворка, о которой и рассказывает в этом видео.

Видео на русском языке, однако хочу заметить, что требуется определённый уровень знаний в разработке API, работе с ролями, клеймами, токенами и т.п. Автор не разжёвывает эти темы довольно резво прыгает по понятиям, рассказывая больше о фреймворке, чем о собственно коде. Если что вот здесь есть целый плейлист на тему авторизации.
911 views05:56
Открыть/Комментировать