Git pro tip for clear commit history and make easy revert bugged features:
1. Branch from
2. Commit and push whatever you want.
3. Make sure you done your changes and project working fine.
4.
5.
6. Structure your changes with any way git cli or any IDE to group your changes by files, directories or scopes and commit them with useful messages.
7. Now you have very clean branch state with easy possibility of reverting changes by change type and you don't need to dig in commit history to see what mean commit with message "+" or "some changes"
1. Branch from
origin/dev or any other branch you need.2. Commit and push whatever you want.
3. Make sure you done your changes and project working fine.
4.
git reset --mixed dev - resets your branch state as before first commit on it but keeps files in current state (latest commit).5.
git push -f origin - clean history and deletes "work in progress" commits in remote.6. Structure your changes with any way git cli or any IDE to group your changes by files, directories or scopes and commit them with useful messages.
7. Now you have very clean branch state with easy possibility of reverting changes by change type and you don't need to dig in commit history to see what mean commit with message "+" or "some changes"
#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.
