Я подумываю о создании некоторых общих расширений, которые пройдут все эти проверки нулевого значения, бросят проверки и утверждения и вместо этого будут использовать беглые API-интерфейсы для обработки этого.C# Код коаксиального кода
Так что я собираюсь сделать что-то подобное.
Shall() - Not quite sure about this one yet
.Test(...) - Determines whether the contained logic executed without any errors
.Guard(...) - Guards the contained logic from throwing any exception
.Assert(...) - Asserts before the execution of the code
.Throw(...) - Throws an exception based on a certain condition
.Assume(...) - Similar to assert but calls to Contract.Assume
Использование:. Father.Shall() Guard (е => f.Shop())
Дело в том, что я не хочу, чтобы эти дополнительные вызовы во время выполнения, и я знаю АОП может решить это для меня, я хочу встроить эти вызовы непосредственно вызывающему, если у вас есть лучший способ сделать это, пожалуйста, расскажите.
Теперь, прежде чем я изучаю или что-либо делаю, я задаюсь вопросом, кто-то уже сделал это или знает инструмент, который это делает?
Я действительно хочу построить что-то подобное и опубликовать его публично, потому что я думаю, что это может сэкономить много времени и головной боли.
Некоторые примеры.
DbSet<TEntity> set = Set<TEntity>();
if (set != null)
{
if (Contains(entity))
{
set.Remove(entity);
}
else
{
set.Attach(entity);
set.Remove(entity);
}
}
Изменения к следующему.
Set<TEntity>().Shall().Guard(set =>
{
if (Contains(entity))
{
set.Remove(entity);
}
else
{
set.Attach(entity);
set.Remove(entity);
}
});
Вместо того, чтобы быть смешной и попытаться сделать удовольствие от других людей, некоторые люди действительно могут узнать что-то о зрелости, вы можете поделиться своим опытом и рассказать мне, что это так хорошо или плохо о нем, что я буду принимать ,
Я не пытаюсь воссоздать кодовые контракты, я знаю, что я использую каждый день, я пытаюсь переместить шаблонный код, который написан в одном месте.
Иногда у вас есть методы, которые для каждого вызова вы должны проверить возвращенный объект и не являетесь вашим кодом, чтобы вы не могли гарантировать, что вызываемый объект не приведет к нулевому значению, поэтому в вызывающем вас должны выполнить нулевые проверки на возвращаемом объекте, поэтому я подумал о чем-то, что может позволить мне легко выполнять эти проверки при цепочке вызовов.
Обновление: Мне нужно подумать об этом еще и изменить API, чтобы сделать намерения понятными, а код более читабельным.
Я думаю, что идея вообще не отполирована, и я действительно зашел слишком далеко со всеми этими методами.
В любом случае, я оставлю это сейчас.
Не уверен, что вы пытаетесь получить по контрактам с кодом. – CodesInChaos
Вы забыли добавить метод Pray(). Не ожидайте, что кто-нибудь понравится читать ваш код. –
'Shall',' Test' и 'Guard' выглядят довольно бессмысленно для меня. – CodesInChaos