Pull to refresh

Организация кода в микросервисах и мой подход применения гексагональной архитектуры и DDD

Reading time7 min
Views14K

Привет, Хабр! В Монолите весь код должен быть в едином стиле, a в разных микросервисах можно использовать разные подходы, языки программирования и фреймворки. Для простых микросервисов с 1 — 2 контроллерами и 1 — 10 действиями особо смысла городить слои абстракций нет. Для сложных микросервисов с различными состояниями и логикой перехода между ними наоборот лучше изначально не лениться. Я хочу рассказать о моем опыте организации кода и использования подходов DDD, Портов и Адаптеров для обоих случаев. Есть кратко суть статьи: Джун — пишет код в контроллере. Мидл — пишет кучу абстракций. Сеньор — знает когда нужно писать код в контроллере, а когда нужны абстракции.
Читать дальше →
Total votes 13: ↑9 and ↓4+5
Comments8

Новые возможности C#, которые можно ожидать в ближайшее время

Reading time4 min
Views30K


В апреле 2003-его года был выпущен C# 1.2 и с тех пор все версии имели только major версию.
И вот сейчас, если верить официальной страничке roslyn на github, в работе версии 7.1 и 7.2.
Узнать что нового нас ожидает в C#
Total votes 34: ↑33 and ↓1+32
Comments73

Ваш C# уже «функциональный», просто позвольте ему это

Reading time4 min
Views19K
Привет, Хабр! Представляю вашему вниманию перевод оригинальной статьи «Your C# is already functional, but only if you let it» автора Igal Tabachnik.

Несколько дней назад я написал в Твиттере фрагмент кода C#, реализующий FizzBuzz, используя некоторые из новых «фичи» в C# 8.0 . Твит “стал вирусным”, несколько человек восхищались его лаконичностью и функциональностью, в то время как другие спрашивали меня, почему я не написал его на F#?

Прошло уже более 4 лет с тех пор, как я в последний раз писал на C#, и то, что я обычно использую функциональное программирование, явно повлияло на то, как я пишу код сегодня. Фрагмент, который я написал, кажется очень аккуратным и естественным, однако некоторые люди выразили опасения, что он не похож на код на C#.
«Он выглядит слишком функциональным.» – писали мне они.
В зависимости от того, кого вы спрашиваете, «функциональное программирование» означает разные вещи для разных людей. Но вместо того, чтобы обсуждать семантику, я хотел бы предложить объяснение того, почему эта реализация FizzBuzz кажется функциональной.
Total votes 24: ↑22 and ↓2+20
Comments127

[По докам] Flutter. Часть 5. Для Xamarin.Forms-разработчиков

Reading time20 min
Views4.2K
Это заключительная часть лаконичной интерпретации документации по Flutter, которая будет полезна Xamarin.Forms-разработчикам. Учитывая текущую ситуацию, сейчас самое время изучать что-то новое! Под катом вы сможете найти для себя информацию, достаточную, чтобы оценить, стоит ли переходить с одного кросплатформенного фреймворка на другой и сколько времени это займёт.


Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments1

Ограничение количества выполнений метода в секунду

Reading time2 min
Views11K
Задача: разработать возможность запускать на выполнение заданное количество операций в секунду.

Требования:

  • Решение должно отрабатывать как можно быстрее (иначе в нем теряется смысл)
  • Решение должно быть потокобезопасным

В результате у меня получилась функция (естественно в составе отдельного класса), которая возвращает true либо false (разрешение для выполнения).
Читать дальше →
Total votes 22: ↑14 and ↓8+6
Comments72

Признаки проблемного дизайна

Reading time13 min
Views24K
Понятие хорошего или плохого дизайна является относительным. В то же время есть некоторые устоявшиеся нормы программирования, которые в большинстве случаев гарантируют ему эффективность, сопровождаемость, тестируемость. Например, в объектно-ориентированных языках это использование инкапсуляции, наследования, полиморфизма. Есть набор шаблонов проектирования, которые в ряде случаев дают положительный эффект на дизайн приложения (а иногда и отрицательный, все зависит от ситуации). С другой стороны, есть противоположные нормы, следование которым иногда приводит к дизайну, который можно назвать проблемным. Такой дизайн как правило обладает следующими признаками (каким-то одним или несколькими одновременно):
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments33

Базовый вирус за 20 минут или почему стоит пользоваться антивирусом

Reading time11 min
Views18K
Приветствую.

В наши дни порог вхождения в мир программирования существенно упал — если раньше, на заре цифровой эпохи, программирование было чем-то из ряда вон выдающимся, «уделом избранных», то сегодня написать кейлоггер или червя может каждый школьник, хоть немного умеющий гуглить и уверенно обращающийся с компьютером. Не обладая какими-либо специальными навыками, можно создать софт, способный причинить немало неприятностей пользователям ПК, которые по тем или иным причинам пренебрегают антивирусными программами.

Под катом — пример написания подобного вредоносного ПО и немного мыслей о том — почему это стало настолько доступным.
Читать дальше →
Total votes 22: ↑5 and ↓17-12
Comments38

Некоторые мысли о паттерне Visitor

Reading time5 min
Views37K
В последнее время очень мне часто приходится использовать всем известный паттерн «Visitor» (он же Посетитель, далее — визитор). Раньше же я им пренебрегал, считал костылём, лишним усложнением кода. В данной статье я поделюсь своими мыслями о том, что в этом паттерне, на мой взгляд, хорошо, что плохо, какие задачи он помогает решить и как упростить его использование. Код будет на C#. Если интересно – прошу под кат.


Читать дальше →
Total votes 30: ↑25 and ↓5+20
Comments48

EF Core + Oracle: как сделать миграции идемпотентными

Reading time4 min
Views4K


Обычно фреймворк EF Core используют в сочетании с MS SQL — другим продуктом Microsoft. Однако это не догма. Например, мы в CUSTIS пишем бизнес-логику на C#, а для управления базами данных используем Oracle. В EF Core есть замечательный механизм миграций, но в нашем случае они не идемпотентны. Дело в том, что Oracle и ряд других БД, например MySQL, не поддерживают транзакционный DDL. Значит, если миграция упадет где-то посередине, ее не получится ни накатить, ни откатить. Как же реализовать идемпотентные миграции на EF Core без MS SQL?
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments2

Обобщённое копирование связных графов объектов в C# и нюансы их сериализации

Reading time7 min
Views6.2K
Задачи по копированию отдельных объектов и связных графов часто встречаются в программировании. Методов их решения существует несколько в зависимости от исходных условий и требований. Цель статьи — рассмотреть ключевые разновидности решений, обозначить область применения, выделить преимущества и недостатки.

image
Читать дальше →
Total votes 14: ↑8 and ↓6+2
Comments0

Blazor Client Side Интернет Магазин: Часть 3 — Витрина товаров

Reading time9 min
Views3.1K


Привет, Хабр! Продолжаю делать интернет магазин на Blazor. В этой части расскажу о том как добавил в него витрину товаров и сделал свои компоненты. За подробностями добро пожаловать под кат.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

Как generic-и нас спасают от упаковки

Reading time2 min
Views11K

При заходе в метод мы часто выполняемым проверку на null. Кто-то выносит проверку в отдельный метод, что бы код выглядел чище, и получается что то-такое:


        public void ThrowIfNull(object obj)
        {
            if(obj == null)
            {
                throw new ArgumentNullException();
            }
        }

И что интересно при такой проверке, я массово вижу использование именно object атрибута, можно ведь воспользоватся generic-ом. Давайте попробуем заменить наш метод на generic и сравнить производительность.

Читать дальше →
Total votes 22: ↑16 and ↓6+10
Comments30

Джон Скит о .NET в 2020-м: «Моё главное нарекание — версионирование»

Reading time14 min
Views12K


Представлять Джона Скита особо не требуется: самый известный пользователь Stack Overflow (с кармой более миллиона), автор книги «C# in Depth», создатель библиотеки Noda Time и вообще человек, про которого шутят «даже Джон Скит не смог бы распарсить HTML регулярками».

В 2017-м Джон выступил у нас на DotNext. Тогда мы опубликовали на Хабре большое интервью с ним о состоянии дел в .NET и C#, где прозвучали громкие слова вроде «потеснит Java», и в комментариях возникли оживлённые дискуссии.

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

А в качестве бонуса добавили в пост ещё один небольшой разговор со Скитом из онлайн-трансляции DotNext 2017 Piter: тогда его увидели только зрители трансляции, а теперь хабрачитатели получают и видео, и текстовую расшифровку.
Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments4

ViennaNET: набор библиотек для backend’а

Reading time4 min
Views13K

Всем привет!


Мы сообщество .NET-разработчиков Райффайзенбанка и мы хотим рассказать про набор инфраструктурных библиотек на .NET Core для быстрого создания микросервисов с единой экосистемой. Вывели его в Open Source!


>>> Готовы поделиться второй частью статьи: прошлись по еще не рассмотренным библиотекам для работы с распределенными транзакциями, очередями и БД.


Читать дальше →
Total votes 36: ↑34 and ↓2+32
Comments24

Unity3D: Автоматический агрегатор скриптов-менеджеров

Reading time4 min
Views3.2K

Вступление


В этой статье речь пойдет об одном виде организации взаимодействия между скриптами-менеджерами (синглтонами именуемыми), а конкретно — использование отдельного класса-агрегатора, в котором содержаться ссылки на все instance менеджеров. Идея создать класс-агрегатор пришла мне в голову после прочтения этой статьи.

Задачи


Я пришел к выводу, что забивать своими собственными ручками менеджеры в класс-агрегатор каждый раз — это дико неудобно. При создании нового менеджера придется открывать класс-агрегатор и вносить изменения. При достаточном количестве опыта можно такие нудные процессы автоматизировать. Таким образом поставились задачи: автоматическое создание синглтонов и их автоматический сборщик.
Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments15

Путь разработчика ASP.NET → PHP

Reading time6 min
Views29K
Так получилось, что в сентябре прошлого года назад я перешел в компанию, где основным языком бэкенд-разработки был PHP 7. До этого технологии с которыми я работал ограничивались C#, ASP.NET, Javascript (JQuery, Angular 1.x, Typescript), MS SQL, IIS и Windows Server. Теперь же предстояло погружение в новый стек. Данная статьи — не очередной наброс на вентилятор для поддержки холивара. Постараюсь отметить, что показалось необычным или непривычным. Статья обращена к .net разработчикам, но, надеюсь, будет интересна и PHP сообществу.
image

Начнем с сессии

Читать дальше →
Total votes 34: ↑24 and ↓10+14
Comments75

Разворачиваем и демонизируем ASP.NET Core приложение под Linux в виде фонового сервиса

Reading time5 min
Views74K
Доброго дня, господа. Сегодня мы затронем тему, за обсуждение которой ещё два года назад сожгли бы на костре — запуск ASP.NET приложения под linux. В данной статье будет использоваться Ubuntu 16.04
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments26

Угадай число: 1-строчный алгоритм изучения c# & qbasic

Reading time3 min
Views3.9K

Несколько месяцев назад читая иностранный форум и увидев соревнование: создать программу "угадай число" покороче я обогнал иностранцев 1-м создав 1-строчный алгоритм "guess number" на 2-х языках


1 IF Russia = 0 THEN Russia = 2222: RANDOMIZE TIMER: num = INT(RND * 100) + 1: GOTO 1 ELSE IF Russia <> 0 THEN INPUT n: IF n < num THEN PRINT «MORE»: GOTO 1 ELSE IF n > num THEN PRINT «less»: GOTO 1 ELSE IF n = num THEN PRINT «da»: END ELSE GOTO 1 'DANILIN Russia 9-9-2019 guessnum.bas

image
Total votes 24: ↑7 and ↓17-10
Comments22

«Хочешь сделать хорошо, сделай это сам» или как я делаю свою выживалку на Unity 3D и C#

Reading time4 min
Views44K

Когда-то давно я много играл в компьютерные игры (в основном — соревновательные), но несколько лет назад открыл для себя жанр Survival Game (выживалки «в простонародье»). Поиграв в несколько разных игр (ARK, Conan Exiles и другие, менее находящиеся на слуху), я понял, что это все же не совсем то, чего бы мне хотелось.

Как и многие ребята, в детстве (прошедшем еще в большой и сильной стране из 4 букв) я зачитывался книгами пиратской тематики: Одиссея Капитана Блада, Остров Сокровищ, да даже Гулливер, в какой-то степени, повлиял на мое мировоззрение и отношение к теме дальних странствий и опасных морских приключений.

И вот примерно полгода назад звезды сошлись. Я решил объединить свои страсти к пиратской тематике и компьютерным играм из жанра «выживалок». Я начал делать свою игру в этом сеттинге, с преферансом и куртизанками.

image
Total votes 80: ↑75 and ↓5+70
Comments101

Как мы автоматизировали портирование продуктов с C# на C++

Reading time13 min
Views6.8K
Привет, Хабр. В этом посте я расскажу о том, как нам удалось организовать ежемесячный выпуск библиотек для языка C++, исходный код которых разрабатывается на C#. Речь идёт не об управляемом C++ и даже не о создании моста между неуправляемым C++ и средой CLR — речь об автоматизации генерации кода на C++, повторяющего API и функциональность оригинального кода на C#.

Необходимую инфраструктуру, обеспечивающую трансляцию кода между языками и эмуляцию функций библиотеки .Net, мы написали сами, решив таким образом задачу, которая обычно считается академической. Это позволило начать выпускать ежемесячные релизы дотнетовских продуктов и для языка C++ тоже, получая код каждого релиза из соответствующей версии кода C#. При этом тесты, которыми был покрыт оригинальный код, портируются вместе с ним и позволяют контролировать работоспособность получившегося решения наравне со специально написанными тестами на C++.

В этой статье я кратко опишу историю нашего проекта и используемые в нём технологии. Вопросов экономического обоснования я коснусь лишь вскользь, поскольку техническая сторона для меня гораздо интереснее. В следующих статьях цикла я планирую подробнее остановиться на таких темах, как кодогенерация и управление памятью, а также на некоторых других, если у сообщества будут соответствующие вопросы.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments27