• Зачем Redux Saga если есть Redux Thunk?

    Serhiy_Koziuk
    @Serhiy_Koziuk
    Redux-saga — это альтернативный подход к организации сайд-эффектов. Вместо того, чтобы диспатчить функции, которые обрабатываются redux-thunk-ом, вы создаёте сагу, которая собирает всю логику обработки внутрь себя. В отличие от thunk-ов, которые выполняются, когда вы их диспатчите, саги запускаются при старте приложения и как бы «работают в фоне». Саги слушают все экшены, которые диспатчит стор, и решают, что делать с ними.

    И у саг в редаксе два преимущества по сравнению с thunk-ами:
    — Они позволяют организовывать сложные последовательности сайд-эффектов
    — И они очень легко тестируются
    Ответ написан
    1 комментарий
  • C#: Реализация UnitOfWork factory?

    1) https://habrahabr.ru/post/321050/
    2) https://habrahabr.ru/post/276593/
    3) Посмотреть примеры кода на https://code.msdn.microsoft.com/
    - Unit of Work & Repositories Framework
    - KiksApp Enterprise application architecture Onion
    4) Pluralsight
    - Become a Full-stack .NET Developer - Advanced Topics
    - Become a Full-stack .NET Developer - Architecture and Testing
    - Become a Full-stack .NET Developer - Fundamentals
    Ответ написан
    1 комментарий
  • Чем отличается паттерн MVC от N layer архитектуры?

    denis_bardak
    @denis_bardak
    Web Developer
    Ответ написан
    Комментировать
  • Какой из циклов самый "Шустрый"?

    Есть книга - "Оптимизация приложений на платформе .NET с использованием языка C#".
    Просто сделать быстрее чем вы уже делаете без знания подробностей сложно.
    Ответ написан
    Комментировать
  • Как передать данные в Layout из Html.RenderAction?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    У вас перепутана последовательность картиночек: Layout зовет экшн Auth-контроллера, а тот, в свою очередь, вызывает GetUser-вьюху и вставляет ее на место вызова в Layout (1 - 3 - 2)

    Тем не менее, ViewBag- это индивидуальное свойство каждого контроллера (BaseController). То есть они разные для Auth-контроллера и того, который зовет Layout (назовем его X) и ваша задумка не прокатит.

    Вы пытаетесь бизнес-логику вытащить на вьюхи.
    Это нужно получать не с помощью отдельного экшна и вьюхи Auth-контроллера, а от сервиса (в который обернуть работу с базой). Затем протягивать этого через вью-модель экшна X-контроллера.
    Ответ написан
    2 комментария
  • А что если цвет использовать как пароль?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Советую Вам меньше думать, а больше читать.
    Один цвет это 2^24=2^(8^3)=16777216 комбинаций на 3-и 8-битных цвета RGB.
    3 любых цвета кол-во комбинаций: 16777216^3
    Теперь, мы помним, что человек различает точно только несколько тонов и цветов: пусть мы дадим 8 разных цветов: 8^3=512.
    А кол-во символов, различаемых человеком (пусть ASCII) 255: 255^3=16581375
    Видите разницу при том же кол-ве и сложности ввода и запоминания пароля при 3-х символах?
    Ответ написан
    Комментировать
  • С#/Unity с нуля. Так много вакансий по С# и Java, но одновременно программисты пишут, что тяжело с работой, особенно без опыта...В чем подвох?

    fedorez
    @fedorez
    Хатуль мадан
    1) по поводу возраста не комплексуй. ерунда это всё. просто у большинства после 30 уровень гормонов падает и лень-матушка плюс задница_принявшая_форму_уютного_кресла и боязнь что-то менять. а вовсе не какие-то поражения мозга, чушь это. Просто так сложилось что профессия молодая у нас, дофига молодёжи, молодые боссы - и на начинающего старше себя смотрят с удивлением. В конце 80-х - начале 90-х, когда прорвало занавес и к нам начали массово приходить персоналки было немало программистов-самоучек вида "научный сотрудник за 30 дорвался до айбиэмки". и работали, и в первых фирмочках, выросших из лабораторий НТТМ таких сотрудников овердофига было. просто они сейчас или боссы, или на пенсии, или растворились в массе пришедших на волне бума юношей.

    2) обсудите с женой. без её поддержки и понимания дело швах. или не выгорит со сменой работы, или семьи лишитесь.

    3) нужна "подушка безопасности" в виде некоторой суммы. это важно.

    4)не затягивайте на годы. почитайте буквари пару месяцев, запилите свой тестовый велосипед - и идите устраивайтесь на работу. стажёром, на небольшие деньги берут не так уж редко. тут вам поможет п.3. на реальной работе, с куратором вы будете прогрессировать со скоростью, просто несравнимой с сидением дома за букварями. плюс вам будет идти стаж, будет что сказать при трудоустройстве уже. плюс работа - это не только опыт разработки - там вы окунётесь во всю обвязку этого процесса - багтрекеры, система контроля версий, постановка работы в компании - доски, скрам, и т.п. дома вы этого не получите, скорей всего.

    5)в IT не только программисты есть. есть тестирование, есть менеджеры - совершенно самостоятельная ветка развития. есть продажники наконец. может вам туда? там тоже интересно, как я погляжу.

    6)и главное. побольше веры в себя. помните, что профессия располагает к сарказму и высокомерию, учитесь мысленно посылать нафиг умников которые будут пытаться самоутверждаться за ваш счёт(в нашей профессии их концентрация слегка больше чем в целом по больнице), не пугайтесь. ваши цели достигаются простым упорством и тяжёлым трудом. садимся, улыбаемся и пашем. читаем буквари. планируем время. не отвлекаемся. забиваем на таймкиллеры. если оно вам реально надо - всё получится.
    удачи.
    Ответ написан
    1 комментарий
  • Для чего нужно virtual/override?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Ахтунг, товарищ. Перед тем как сомневаться в профессионализме своих коллег очень советую хотя бы немного сомневаться в собственном. Это как минимум изредка полезно. А теперь ноги в руки и вперёд читать про таблицы, виртуальность и методы. Это не просто полезно, но архиважно. Учитывая, собственно, вопрос.

    А вопрос состоял в следующем. Вот у нас есть объекты, друг от друга наследуются, имплементируются и всё круто-прекрасно, но блджад. Зачем они нужны-то? Нет, не агрегация данных, хотя и она тоже. Нет, не агрегация реализации, хотя и она тоже. И нет, нет, не просто потому что. Хотя и это тоже... А вот подумай о такой ситуации. Есть библиотека. Да не важно какая, ну пусть это будет UI/UX. Вот есть абстрактный (!) класс кнопка. Почему абстрактный? Да потому что любая кнопка - это кнопка. Это как бы класс над классом. Кнопка может быть красной, может быть кликабельной, может становится не кликабельной после нажатия, может открывать диалог выбора файлов, а может закрывать приложение к чертям. В общем, много чего может уметь делать кнопка. И вот эту кнопку хочется поставить на формочку. И сделал создатель библиотеки такой прекрасный метод у формы PutAnyButtonHere(Button btn, Point xy). Но... Чёрт, чувак, мы должны передать объект класса Button, а у нас какой-нибудь наследник MyBestButton : BestAbstractLibraryButton, который наследник той самой Button. И у Button декларирован такой прекрасный метод TimeWhenUserClickOnMe(Point xy, AnotherInfo somethinElse), собственно... Получается, что где-то в недрах той самой библиотеки, когда автор прекрасной UI/UX библиотеки вызывает этот самый метод он должен вызвать НАШУ реализацию, а не реализацию BestAbstractLibraryButton. И уж точно не несуществующую реализацию Button (ибо метод там чисто-виртуальный). Идея виртуальных методов изначально именно в том, что есть особая таблица, которая хранит реализации отдельно, объекты отдельно, но когда мы пытаемся вызывать у объекта виртуальный метод происходит такая магия, которую принято называть поздним связыванием.

    А ключевые слова это просто для того, чтобы программист читая чужие полотна кода хоть ну немного имел возможность хоть как-то их понять. Что конкретно хотел программист в конкретной ситуации. И, если в Java все методы по дефолту виртуальные и ничерта не понятно из чужих полотен, хотел здесь программист позднее связывание, или это просто агрегация функционала, то в шарпе данной проблемы "как бы нет", язык порой чрезвычайно многословен на, казалось, такие банальности. Что в итоге изредка, но экономит чёртову тучу времени.

    Сухой остаток. Если мы вызываем виртуальный метод у объекта класса наследника некоторого супер-класса имея ссылку типа супер-класса, то вызывается реализация метода наследника. Если мы вызываем не виртуальный метод у объекта класса наследника некоторого супер-класса имея ссылку типа супер-класса, то вызывается реализация метода супер-класса. В остальном поведение тривиальное.

    Отсебятина. Не понимая данных вещей невозможно говорить, что принципы объектно-ориентированного программирования были усвоены. Советую прочитать "Философия Java" (вообще там Java скорее как язык для примеров, в общем-то ООП оно и в Африке ООП). Ну и пытаться разобраться в точке зрения любого человека, особенно если его компетенция хоть чем-то подтверждена (например, успешным трудоустройством).
    Ответ написан
    Комментировать
  • Как присоединиться к стартапу за долю?

    @xfg
    Как офомрить долю в стартапе?

    Оформление вас, как одного из учредителей юридического лица. Если организация только создается, то вносите деньгами/имуществом долю в уставный капитал огранизации. Минимально разрешенный законом уставный капитал ООО должен быть не менее 10 тыс. руб., т.е. вы вполне можете самостоятельно внести свою долю. Нет смысла раздувать уставный капитал, если организация не планирует привлекать кредиторов. Если же организация уже зарегистирована, тогда нужно нотариально оформить продажу доли и уведомить регистрирующий орган о изменении состава учредителей.

    Договоренности на словах тоже могут иметь место быть, если вы будете иметь доступ к вашему будущему инструменту извлечения прибыли. Поскольку вы в равной степени, сможете сделать попытку самостоятельно воспользоваться этим инструментом. Для юр. лица это тоже в полной мере актуально. Но в этом случае, вы сможете оценить серьезность намерений ваших будущих коллег. Иметь чуть больше уверенности в том, что весь этот энтузиазм и порыв не погаснет спустя непродолжительный промежуток времени.
    Ответ написан
    Комментировать
  • Как присоединиться к стартапу за долю?

    riky
    @riky
    Laravel
    чуваков с "идеями" нынче дополна.
    проблема даже не в том что обманут, долю не дадут. нужно убедится насколько они понимают эту идею, насколько они ее оценили и просчитали, перепроверить все. и насколько они готовы идти до конца. а так чатсо бывает начали на позитиве - все ок, перспективно кажется, а потом оказывается что не учли множество мелочей которые в сумме делают проект не рентабельным.

    ну и правильно разделить доли изначально в соответствии с тем кто что делает (в дальнейшем при изменениях команды или ролей можно пересчитывать).

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

    в общем 7 раз отмерь - и один подпиши.
    Ответ написан
    Комментировать
  • .NET Core -- перспективы, стоит ли изучать?

    @nico
    Ну что значит "переходить". Стоит ли разбираться, конечно стоит, за ним будущее (возможно). Стоит ли переводить текущие проекты? А зачем? Стоит ли начинать новые, вот тут вопрос. Я думаю, что не стоит, еще довольно сыро для серьёзного продакшена. А для мелких попроктов вполне даже сойдет
    Ответ написан
    Комментировать
  • .NET Core -- перспективы, стоит ли изучать?

    @serber
    Сейчас самое время его изучать, к тому времени как платформа будет полностью готовой будет багаж знаний. Но пока применять его на серьезных проектах я думаю не стоит.
    Тот же EF Core - не готов и на половину. Большое количество багов, построение не оптимальных запросов, медленная работа. Я сравнивал одни и те же запросы на EF 6 и EF Core - разницы в десятки раз.
    Ответ написан
    Комментировать
  • .NET Core -- перспективы, стоит ли изучать?

    Старые проекты не вижу смысла переводить и не всегда возможно т.к. много чего еще нет (XSD, XSLT), а возможно и не будет (WPF), хотя есть альтернативы (Gtk#). Стоить отметить, что работа ведется интенсивно и возможно через год другой наверстают. А новые проекты, при условии что, все нужное реализовано в Core думаю уже можно начинать. В любом случае следить т.к. это тренд и думаю, что рано или поздно выбора не будет.
    Ответ написан
    5 комментариев
  • .NET Core -- перспективы, стоит ли изучать?

    У меня есть опыт работы с Core. Что могу сказать:
    1. Встроенный DI это круто.
    2. Встроенный логгер это круто.
    3. Я пробовал с ним работать в стадии RC, так что было много головняков, связанных с постоянными обновлениями.
    4. Переходить стоит. Спрос на это уже есть.
    Ответ написан
    Комментировать
  • .NET Core -- перспективы, стоит ли изучать?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Net 4.6 остается отдельной веткой, как и MVC 5 и WebForms. Ну миграция готовых проектов на него может быть такой - "О мы практически ничего не меняли" или такой - "Зачем мы это начали, мы никогда не сможем сделать". Но изучать стоит, да и новые проекты можно начинать на Core, несмотря на многих нытиков в сети, сильные изменения в RC ветках, релиз уже вышел.
    Ответ написан
    Комментировать
  • Часто ли вы используете интерфейсы?

    @Beltoev
    Живу в своё удовольствие
    Самый простой пример, который приходит на ум: представьте, что вы хотите получать оповещения об ошибках на сайте по email/смс/чему-нибудь ещё.

    С интерфейсами ваше решение будет выглядеть как-то так:
    // Собственно, сам интерфейс оповещений
    public interface INotification
    {
        void Notify(string text);
    }
    
    public class EmailNotification : INotification
    {
        public void Notify(string text)
        {
    		// код по отправке почты
        }
    }
    
    public class SmsNotification : INotification
    {
        public void Notify(string text)
        {
    		// код по отправке смс
        }
    }
    
    // ... Еще какие-нибудь классы оповещений
    
    
    // В каком-нибудь классе, где может появиться ошибка
    public class MaybeErrorClass
    {
        private INotification _notification;
    
        public MaybeErrorClass(INotification notification)
        {
    		// Класс не должен знать, по какому каналу оповещать об ошибках.
    		// Он работает с абстракцией
            this._notification = notification;
        }
    
    	// Очень простой пример метода, в котором ожидаем генерацию ошибки
    	public void DoSomething()
    	{
    		try {
    			// какой-то блок, в котором можем получить ошибку
    		}
    		catch (Exception e)
    		{
    			this._notification.Notify("А у нас тут ошибка!");
    		}
    	}
    }


    Теперь можно создавать экземпляры этого класса, передавая ему желаемый тип оповещения:
    var maybeErrorEmail = new MaybeErrorClass(new EmailNotification());
    var maybeErrorSms = new MaybeErrorClass(new SmsNotification());


    Теперь вопрос на засыпку: как бы вы решили подобную задачу без интерфейсов?

    На ум приходят только абстрактные классы (кстати, интерфейс - это тоже абстрактный класс), но их лучше использовать только в случае, если у производных классов есть какая-то общая логика, которую не хотелось бы дублировать.
    Ответ написан
    1 комментарий
  • Как возвращать ошибки из сервисов?

    alex1t
    @alex1t
    .net developer
    Ещё как вариант - это особый класс возврата, а-ля ASP.NET MVC ActionResut.

    Т.е. все методы возвращают некоторый класс Result:
    class Result<T> {
       public T Result {get; private set; }}
       public bool Success {get; private set; }}
       public IEnumerable<Exception> Errors { get ... }
       public string ErrorMessage {get ... } // этого можно и не делать
    
       private Result() {}
       public static Result<T> Success(T result) { return new Result() { Result = result, Success = true }; }
       public static Result<T> Fail(Exception ex) { return new Result() { Success = false, Errors = new List<Exception>() { ex }, ErrorMessage = ex.Message }; }
    }
    Ответ написан
    1 комментарий
  • Как подключить .NET API в Visual C#?

    @Madfisht3
    Если уж нугетом не может воспользоваться, то он точно не VS c# программист.
    Ответ написан
    Комментировать
  • Как возвращать ошибки из сервисов?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Исключение - это исключительная ситуация, которая не должна происходить в обычном варианте работы. Но если возможно отсутствие объекта, и это нормальная ситуация (неисключительная), то это не исключение, лучше вернуть null.
    Пример первый - метод должен вернуть текущего юзера. Конечно, текущий юзер должен быть, если его нет - это исключение.
    Пример второй - ищется комментарий к сообщению. Ни одного комментария никто не оставил, и если искать найденный юзер комментария - то юзер не найдётся, но это не исключение - нормально вернуть null.
    Но возможно, что лучше код сделать так, чтобы вызов этого метода не вызывался бы.
    Ответ написан
    Комментировать