Как стать автором
Обновить
-7
0

Пользователь

Отправить сообщение
За ответ на этот Ваш вопрос можно сесть. Так что от дальнейшего углубления в «архитектуру» я откажусь.
Я скорее это изобразил бы так:
public class Theology : Religion
Богосло́вие, или теоло́гия — систематическое изложение и истолкование какого-либо религиозного учения, догматов какой-либо религии.
Прокладки нужны для того, чтобы не протекло. К примеру: деньги на билеты, время на дорогу или исправление ошибок. Особенно когда «это» случается в первый раз. А эффективность их работы надо проверять еще на полке в магазине.

Я не призываю и не агитирую, а лишь предлагаю обратить внимание.
Может стоит обратить внимание на посредников? Думаю такие есть в любом городе.
Пишите доверенность на получение визы, отдаете паспорт и комплект документов, немножко денежек и всё. Думаю всяко будет дешевле, чем два билета + Ваше время. Плюс посредник (если хороший и занимается этим, скажем, долго), укажет на ошибки, поможет составить пакет документов или подскажет в каком посольстве сейчас проще и быстрее получить.
Итальянцы тоже в свое время извинялись, что не могли поставить на 2 года мульт, т.к. у меня была только одна полугодовая виза в Испанию. Если бы была бы хоть одна в Италию, дали бы на два, а так только на один.
Для итальянской визы даже покупать ничего не надо, хватает просто брони, как билетов, так и отеля. Как в Испании не знаю, но с Италией реально крайне все легко.
Аналогично, только наоборот. Могу воспринимать код как код только в белой схеме. От черной схемы меня шарахает. Особенно неудобно в освещенном солнцем помещении: мониторы с темной темой студии бликуют сильнее, текст можно разглядеть только выгнав автора из-за стола.
Пробовал несколько раз перейти «на темную сторону» и даже выбирал что-то промежуточное серое, но всё, что связано с чтением (код в студии, текста на сайтах, документы и таблицы) предпочитаю видеть на светлом фоне.
Хотя на мобильном стоит исключительно темная тема, но на нем я читаю не так много.
За что боролись, на то и напоролись.
Извините, но лично мне кажется, что приведенные Вами тезисы — это бред.

Какая нах*й компенсация, когда вас там убить может.

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

Я жду, когда у нас это тоже начнут нормально контролировать, чтобы нельзя было без ответственности сдавать свою хату.

Да сколько можно-то все контролировать? Наверное из-за таких вот людей мы и читаем часто абсурдные новости об очередном абсурдном законе. Вы, случайно, не депутатом работаете?

Лично я больше предпочитаю отдых с палаткой в лесу (с соблюдением всех экологических «тонкостей»). Так что теперь начать контролировать продажу и установку палаток? Запретить установку палатки на срок до одного месяца; запретить установку палатку, если ее площадь превышает 2 кв.м.на человека; запретить установку палатки, если в радиусе 10 км находится лицензированный отель, т.к. индустрия гостиничных услуг теряет недополученную прибыль. Ну бред же? Так почему запрет на сдачу своего имущества (я имею в виду законной сдачи, с договором, чеком, налогами при необходимости и т.п.) — не бред?

В тех случаях, когда передо мной стоит необходимость снять жилье на небольшой срок (до дух недель), я скорее будут искать отель, чем пойду на Airbnb. И причина тут не в том, что айрбнб — нехорошие люди, которые отбирают бизнес у хороших, и не потому, что гостиница всегда несет ответственность за постояльцев и предоставляет работу очередным нелегалам, и не потому что я против того, чтобы эти жалкие люди сдавали свои «хаты», превращая дома в гадюшник. А потому, что мне удобнее (возможна оплата по карте, предоплата, постоплата по счету или наличкой), потому что могу получить более качественный и обширный сервис (скидки на общественный транспорт, детскую кроватку или стул в номер), гарантию этого качества (отель дорожит своей репутацией, отзывами и т.п.). Но это мой осознанный выбор, имею возможность заплатить. Но не все хотят/могут.
В любом случает, если Airbnb будет влиять на индустрию, заставляя всех участников снижать стоимость и повышать сервис, то я только за его существование, но если «отельное лобби» повлияет на полный запрет таких сервисов, то, боюсь, эффект будет обратный: увеличение цен, снижение качества услуг, дефицит мест.
Странно, что девушку из ролика не засудили за нарушение какого либо копирайта (вспоминая историю с американскими тракторами).
Вы, наверное, не так поняли о чем я.
При наличии двух прокси (эквадорский и ямайский), которые формально сотрудничают с РКНом и не являются заблокированными на территории РФ, потому что блокируют доступ к запрещенным сайтам с российских айпишников (к примеру только с российских), у рядового пользователя все равно есть возможность получить доступ к запрещенным сайтам, через связку двух или более прокси. При этом никто никак никакой закон не нарушает.

Т.е. прокси Б блокирует сайты для российских айпи, но не блокирует эти же самые сайты для эквадорских айпи, прокси А не блокирует доступ к прокси Б, т.к. Б не находится в реестре запрещенных сайтов. Юзер Вася из Обнинска прыгает сначала на А, потом оттуда на Б, а потом уже на сайт с агитацией митингов, при этом не нарушив ни одного закона.
Но при этом Роскомнадзор пойдёт таким сервисам навстречу, если они предоставят доступ к реестру запрещённых сайтов и будут добровольно закрывать к ним доступ.

Не совсем понял, вернее совсем не понял, что имелось в виду в этом предложении. К какому реестру должен предоставить доступ условный впн-сервис?

Я, так понимаю в основном речь идет о сервисах (прокси/впн/анонимайзеры). Получается такие сервисы должны блокировать запрещенные сайты для российских граждан, т.е. айпишников. Т.е.:
— имеем прокси/впн А где-то в Эквадоре, который блочит все что хочет Роскомнадзор для российских айпи
— имеем прокси/впн Б где-то на Ямайке, который тоже блочит все что хочет Роскомнадзор для российских айпи
— оба сервиса (и А, и Б) не нарушают ничего, что запрещает Роскомнадзор
— идем на Б через А и получаем профит, т.к. Б не обязан блокировать что либо для айпишников из Эквадора.

Думай дальше, Роскомнадзор!

Так же вообще не понял, как РКН планирует штрафововать зарубежные прокси-серверы и VPN-сервисы.
Я остановился в итоге на использовании стандартных конвертов. Правда использую упрощенную версию
генерик класса
namespace Converters
{
    public abstract class BaseConverter : IValueConverter
    {
       
        protected abstract object Convert(object value);
        protected virtual object ConvertBack(object value)
        {
            return value;
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Convert(value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ConvertBack(value);
        }
    }

    public abstract class BaseConverter<T> : BaseConverter
    {
        protected abstract object Convert(T value);

        protected override object Convert(object value)
        {
            return Convert(value is T ? (T)value : default(T));
        }
    }

    public abstract class BaseConverter<T1, T2> : BaseConverter
    {
        protected abstract T2 Convert(T1 value);

        protected override object Convert(object value)
        {
            return Convert(value is T1 ? (T1)value : default(T1));
        }
    }
}



Может и не лучшая реализация, но для моих 90% случаев она подходит.
Главное — это понимать, что конвертеры — это некоторые «хелперы» слоя вьюшки, и они должны быть максимально отделены от других слоев. Т.е. когда у меня возникает соблазн или необходимость конвертировать какой либо класс из вьюмодел или модел, то я сперва сильно задумаюсь. а нельзя ли это сделать каким либо другим архитектурным решением. Таким образом довольно быстро формируется набор «стандартных» конвертов, которые живут в своей библиотечке.

В качестве уменьшения кода, вдохновившись статьёй, быстро сообразил свой велосипед, который состоит из одной реализации интерфейса IValueConverter (мультиконверторы и мультибиндинг я стараюсь не использовать, но добавить будет не сложно). Если это уже кем-то реализовано, то прошу прощения.

Code-behind
namespace Converters
{
    public delegate object ConvertHandler(object value, Type targetType, object parameter, CultureInfo culture);

    public class ValueConverter : IValueConverter
    {
        public ConvertHandler ConvertHandler { get; set; }
        public ConvertHandler ConvertBackHandler { get; set; }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ConvertHandler?.Invoke(value, targetType, parameter, culture) ?? value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ConvertBackHandler?.Invoke(value, targetType, parameter, culture) ?? value;
        }
    }

    public class ConvertersFactory
    {
        public static string NullableValue { get; set; }

        public static ConvertHandler IntToString => (value, type, parameter, culture) => value.ToString();
        public static ConvertHandler NullableIntToString => (value, type, parameter, culture) => value is int ? value.ToString() : NullableValue;
        
    }
}


XAML
<UserControl x:Class="ConverterControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local="clr-namespace:Converters">

    <UserControl.Resources>
       <local:ValueConverter x:Key="IntToStringConverter"
                              ConvertHandler="{x:Static local:ConvertersFactory.NullableIntToString}" />
    </UserControl.Resources>

    <Grid>
        <TextBlock Text="{Binding Converter={StaticResource IntToStringConverter}}"/>
    </Grid>
</UserControl>




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

Если мне прямо сейчас предложат удаленную работу, даже с небольшим дауншифтингом, соглашусь не раздумывая.
Аварийный генератор не запустился, потому что его не запустила автоматика, которой что-то не понравилось в напряжении сети, потому производитель так захотел, потому что авиакомпания потерпела убытки, потому что менеджер амазона ехал на машине из датацентра из-за нескольких идущих подряд друг за другом редких сбоев, что случается гораздо чаще, чем принято думать.
Я так и не понял кто кого изнасиловал.
Шлем — это вообще излюбленная тема для споров. И Вы, несомненно, правы. Любая защита добавляет некоторой уверенности и слегка снижает бдительность. Попробуйте на том спуске проехать в фулл-фэйсе, черепахе, поножах, налокотниках, незнаюещесчем. И увидите, что стали еще бесстрашней и быстрей. И это логично, мне кажется.

На заре еще своих покатушек я, естественно, ездил без шлема. И в нашей компании были разговоры и за, и против. Кто говорил, что лишняя безопасть необходима, кто-то говорил, что шлем — слишком мешает, жарко, не чем дышать. Но было мнение, что автомобилисты лучше относятся к велосипедисту в шлеме. Мол не просто вылосыпыдыст, а целый спортсмен. Сейчас этот тезис смешон, но тогда, в далеком 2007м, когда велосипед бы не так популярен, это казалось аргументом =)

Лично я, после того, как мой же велосипед догнал меня в голову (благо тогда уже был в шлеме), езжу исключительно в шлеме. Плюс на шлем можно удобно повесить налобный фонарь «напостоянку». Плюс шлем (лично у меня закрытого типа) защищает от солнца и дождя… Кто-то вещает на него козырьки, зеркальца, красные маячки. В общем одни возможности!))
Я бы предпочел видеть первый вариант, потому что много «если»:
— если нужно проверить только на nan или только на бесконечность? Т.е. Вам, как мне кажется, нужно минимум три метода в гварде.
— если нужно под разное условие бросить свои эксепшены? Отдельно под nan, inf и range?
— если нужно другие условия? Проверка на положительную или отрицательную бесконечность, на вхождение в несколько массивов или на невхождение в данный, на положительность (больше нуля) и так далее? Писать дополнительные методы в гварде или комбинировать ифы и вызовы гварда?

Как бы Вы реализовали следующее:
if (double.IsNaN(weight) || double.IsNegativeInfinity(weight))
{
    throw new ArgumentNegativeException(
        nameof(weight), weight, "Значение параметра не является числом или равно минус бесконечности.");
}
if (weight > 100 || weight < 1000)
{
    throw new ArgumentOutOfRangeException(
        nameof(weight), weight, $"Значение параметра выходит за границы диапазона 0..1000.");
}

с помощью Вашего единственного
Guard.ArgumentInRange(nameof(weight), weigth, 0, 1000);

?
Может вообще сторонним библиотекам не доверять? Убрать из кода Json.NET, Moq, Dapper… они делают не менее критичную работу, чем проверка на null.

Пожалуйста не смешивайте вареники с пельменями. Я не писал, что стоит отказаться от библиотек своих или сторонних. Я говорю, что стоит отказаться от гвардов, а не от библиотек. Убирать либы из проектов — я не про это. А вот про доверие к сторонним библиотекам — это вполне себе открытый вопрос. Я бы не стал слепо и безоговорочно им доверять. В том же Json.NET может быть ошибка, необработанная исключительная ситуация или на вход прилететь уж совсем невалидный json и не известно, как десериализатор себя поведет. И я бы никогда бы не отправил в продакшен код типа такого:

Movie m = JsonConvert.DeserializeObject<Movie>(json);
string name = m.Name;


А кто гарантирует корректную реализацию остального кода, который вы пишете?

А никто. В идеале функция настолько параноидальна. что доверяет лишь тому коду, который она включает в себя. А все входные параметры и результаты работы других функций (даже написанных Вами) должны подвергаться сомнению и проверке. Но это, конечно, в идеале.

Сложно представить проект, в котором набор простейших проверок на null, длины строки и т.п. может быть ощутимо сложнее остальной части кода вплоть до «не разобраться». А если вы поместили в гвард бизнес-логику, то это уже не Guard, и на вас налагаются такие же обязанности по обслуживанию этой логики, как и по отношению к остальной части бизнесового кода.

Как не все йогурты одинаково полезны, так и не все функции одинаково проверяют входные параметры. Одной функции достаточно простой проверки строки на null, второй просто заюзать string.IsNullOrEmpty(), а третьей непременно надо string.IsNullOrWhiteSpace(). А потом окажется, что для четвертой входная строка никак не может быть длиной меньше 10, а для пятой не меньше 10 и не больше 15, для третьей вообще не должна быть пустой либо содержать спецсимволы. Вот и появляются в таких вот гвардах часто недокументированные методы типа:
Guard.EnumerableNotNull…
Guard.EnumerableNotNullOrEmpty…
Guard.EnumerableNotNullOtEmptyOrHasNullableItems…
Guard.EnumerableIsEmpty…
и так далее до бесконечности. А если это еще всё реализовано как советуют тут. то это вообще «ховайся в кукурузу», уж простите мне мой украинский.

В другой ветке справедливо заметили, что решение проблемы топикстартера по выпиливанию/рефакторингу гвардов решается решарпером за минуты.

На это можно ответить только анекдотом:
Русские славятся своим умением выходить из любой безвыходной ситуации. Но больше они славятся умением в такие ситуации входить.
Не смотря на желание под каждой веткой комментариев оставить свое мнение, все же напишу кратенько отдельно про свои пять копеек.
Я не профессиональный велоспортсмен, но где-то с 2005го по примерно 2015й очень активно катался по Московской области и Москве. Как и в одиночку, так и в составе небольших и немаленьких пелотонов, как и ежедневно, так и в формате многодневных походов. Не претендую на единственное правильное мнение, но так сказать опыт есть. Я не хочу сказать, что велосипедист — это бесправный хруст на дороге, который всегда виноват в ДТП. Я хочу сказать, что в интересах самого велосипедиста обеспечить максимальную безопасность своего движения. Никакие законы, правила и прочее не помогут вам сохранить своё здоровье или жизнь. А «убраться» об дерево можно и на безлюдной/безавтомобильной лесной тропинке.

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

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

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

Катайтесь аккуратно!

А по теме топика: для покатушек использую Sennheiser OCX 686G Sports. Хоть звучание и не самое лучшее. но я не привередлив. Из плюсов: функция гарнитуры, кнопки управления громкости и микрофон на клипсе, крепление на ухе (не спадают). Из минусов: немного короткий провод, ну и звучание.

Получилось не так кратко. как хотелось. Извините =)
Если Ваш мелкий фрэймворк заставляет Вас делать проверку параметров функций именно с помощью статических гуардов или без оных использование такого фрэймворка нецелесообразно или не работоспособно, то да, я бы не стал использовать подобный фрэймворк.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность