#pattern of the day
# Active record pattern
Pattern where record have self-contained database connection.
Or anti-pattern due to Single-responsibility principle
# Active record pattern
Pattern where record have self-contained database connection.
part = new Part()
part.name = "Sample part"
part.price = 123.45
part.save()
Or anti-pattern due to Single-responsibility principle
#pattern of the day
# State pattern
Pattern that allows manage with states of the object and events that executes before/on/after state changed and manage states routing.
Example:
# State pattern
Pattern that allows manage with states of the object and events that executes before/on/after state changed and manage states routing.
Example:
var @object = new SomeObject();See c# StateMachine that has powerful possibilities for state management: https://github.com/dotnet-state-machine/stateless
var stateMachine = new StateMachine<TriggerEnum, StateEnum>(object);
stateMachine.InitState(StateEnum.NoAction);
stateMachine.Transition(TriggerEnum.TrigerSomething, StateEnum.ActionRunned, (obj, targetState) => Triggered(obj, targetState));
stateMachine.Do(TriggerEnum.TriggerSomething); // output: "Triggered on NoAction"
Console.WriteLine($"Current state: {@object.State.GetDisplay()}"); // output: Current state: ActionRunned
void Triggered(SomeObject obj, StateEnum state)
{
Console.WriteLine($"Triggered on {obj.State.GetDisplay()}");
obj.State = state;
}
Found approach for DDD that called "aggregation root". It's looks good but only on paper (in theory) and works good with simple examples like "User, customer, shopping cart, order". On practice on every private setter you will create setter method (like in #2 of my examples). Also different methods for every system you work with. Not even talking about business logic inside database entity that violates SOLID's "single responsibility principle".
Forwarded from Библиотека программиста
🛠 Всё, что нужно знать начинающему о Git: рассмотрим за 15 минут
Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.
🔗 Основной сайт
🔗 Зеркало
Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.
🔗 Основной сайт
🔗 Зеркало
Это всё конечно хорошо, шпаргалки там, и прочее. Но без знания работы инструмента, нельзя пользоваться им профессионально. А git это один из основных инструментов программиста. Нет ничего лучше, чем прочитать книжку про git, и самая лучшая книга, которая дала мне все азы, порекомендовал мне мой первый senior еще много лет назад:
https://www.kobzarev.com/wp-content/uploads/books/git/progit.ru.pdf
https://www.kobzarev.com/wp-content/uploads/books/git/progit.ru.pdf
На тему шпаргалок:
Можно распечатать этот листочек и повесить на стеночку, и с шансом 10% вы потратите на определение кодировки меньше минуты. И с шансом 1 из N количества вариаций кодировок (от cp8859-1 до cp8859-16, от win1250 до win1258 и тд.) вы вычислите нужную кодировку. А можно использовать обычные декодировщики (например этот меня выручал чаще чем остальные - https://2cyr.com/decode/?lang=ru).
Так же и со шпаргалками по языкам, инструментам. Если не знаете инструмент, который описывает шпаргалка, хотябы на среднем уровне, то и изучить инструмент шпаргалка не поможет. А если инструмент изучен достаточно, чтобы не искать в гугле каждую вторую команду, то шпаргалка не нужна, потому что повседневные вещи, которые в ней описаны, вы и так делаете с закрытыми глазами, а что-то специфическое очень вероятно, что в шпаргалке не описано, и всёравно придется лезть в документацию, в
Можно распечатать этот листочек и повесить на стеночку, и с шансом 10% вы потратите на определение кодировки меньше минуты. И с шансом 1 из N количества вариаций кодировок (от cp8859-1 до cp8859-16, от win1250 до win1258 и тд.) вы вычислите нужную кодировку. А можно использовать обычные декодировщики (например этот меня выручал чаще чем остальные - https://2cyr.com/decode/?lang=ru).
Так же и со шпаргалками по языкам, инструментам. Если не знаете инструмент, который описывает шпаргалка, хотябы на среднем уровне, то и изучить инструмент шпаргалка не поможет. А если инструмент изучен достаточно, чтобы не искать в гугле каждую вторую команду, то шпаргалка не нужна, потому что повседневные вещи, которые в ней описаны, вы и так делаете с закрытыми глазами, а что-то специфическое очень вероятно, что в шпаргалке не описано, и всёравно придется лезть в документацию, в
--help или гугл.Единственная причина того, что легаси никто не рефачит - разрабам лень переписывать тесты. #fun_minute
😁1
#csharp #protip
## Почему нужно использовать
Всё очень просто: оператор
Пример:
* Объявим класс, который переопределяет операторы сравнения, и возвращает истину, когда существующий объект сравнивают с
* А теперь сравним существующий объект с
* Вывод консоли:
Бинго!
## Почему нужно использовать
is null, вместо == nullВсё очень просто: оператор
== можно перезаписать, а is - не оператор, и компилируется отличным от операторов способом.Пример:
* Объявим класс, который переопределяет операторы сравнения, и возвращает истину, когда существующий объект сравнивают с
null и код вернет истину, как будто наш объект равен nullclass SomeObject
{
public static bool operator ==(SomeObject left, object right)
{
if (right is null)
{
return true;
}
return false;
}
public static bool operator !=(SomeObject left, object right)
{
if (right is null)
{
return false;
}
return true;
}
}
* А теперь сравним существующий объект с
null, с помощью оператора == и с помощью ключевого слова isstatic void Main(string[] args)
{
var isNullOperator = new SomeObject() == null;
var isNullIs = new SomeObject() is null;
Console.WriteLine($"Вывод через == : {isNullOperator}");
Console.WriteLine($"Вывод через is : {isNullIs}");
}
* Вывод консоли:
Вывод через == : True
Вывод через is : False
Бинго!
#tools
Редактор OpenApi, который превращается в привычный swagger.
Очень удобная штука для проработки контрактов.
https://editor.swagger.io/
Редактор OpenApi, который превращается в привычный swagger.
Очень удобная штука для проработки контрактов.
https://editor.swagger.io/
Если вы хотите получить доступ к новому Bing с ChatGPT из России, вот как это сделать:
Если вы получаете сообщение “Sorry, looks like your network settings are preventing access to this feature.”, то выполните следующие действия:
Тэги: #ai #neural_networks #instructions
Please open Telegram to view this post
VIEW IN TELEGRAM
Microsoft
Microsoft account | Sign In or Create Your Account Today – Microsoft
Sign In with your Microsoft account. One account. One place to manage it all. Welcome to your account dashboard.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Интерактивное обучение git branching с визуализацией. Поможет разобраться в невидимых механизмах git, для тех, кто запоминает через визуализацию.
Покроет 99% возможных сценариев во время работы.
https://learngitbranching.js.org/?locale=ru_RU
Покроет 99% возможных сценариев во время работы.
https://learngitbranching.js.org/?locale=ru_RU