Задать вопрос
  • Где осуществлять валидацию пользовательского ввода в архитектуре MVC?

    @Maa-Kut
    А где нужно, "по уму", закладывать проверки, что в числовое поле введено число? Где фильтруются sql-инъекции, HTML-разметку и прочие грязные хаки?

    По идее, все вышеперечисленное относится к бизнес-правилам и, соответственно, лежит в моделях. Т.е. контроллер, получив некий ввод от пользователя, отдает эти данные модели (мол, "проверь" или "попытайся сохранить"), а модель либо говорит, что все хорошо, либо возвращает список ошибок, не дающих данные обработать.

    Как распределена ответственность между частями системы в рамках архитектуры MVC в случае с толстым клиентом?

    Толстый JS-клиент можно сам по себе рассматривать как MV*-приложение. Серверная часть в этом случае становится моделью. При этом часть функций модели (скажем, некая базовая валидация) может быть реализована и на стороне JS; в конце концов, никто не говорит, что модель не может состоять из нескольких слоев.
    Ответ написан
    6 комментариев
  • Equals и GetHashCode и их переопределение?

    @Maa-Kut
    В первую очередь: для корректной работы с хэш-коллекциями (типа Dictionary), а именно - при использовании в качестве ключа. Их внутренняя логика предполагает, что если для двух объектов Equals возвращает true, то и значения, возвращаемые GetHashCode, должны быть равны. Если это не так, то коллекция будет работать некорректно: скажем, не находить значения по ключу, хотя они там есть.
    Ответ написан
    Комментировать
  • На чем лучше сделать HTTP API?

    @Maa-Kut
    Как вариант - ASP.NET Web API. Под Mono, вроде бы, работает.
    Ответ написан
    Комментировать
  • Нужно ли вкладываться в IDE для C#?

    @Maa-Kut
    Работа работе рознь. Существует бесплатная Community Edition, которая содержит почти все необходимое (во всяком случае, лично я пока не натыкался на отсутствие каких-то реально нужных фич). Есть ограничения на коммерческое использование, но одиночного разработчика они не затрагивают.

    Что до ReSharper'а, то очень многие отлично и без него живут, благо в VS хватает функционала "из коробки". Я сам ставил его когда-то, поигрался немного и удалил: не впечатлило.
    Ответ написан
    6 комментариев
  • Стал ли теперь C# бесполезным в интерпрайзе?

    @Maa-Kut
    Во-первых, .NET тоже потихоньку осваивает Linux.

    Во-вторых, госсектор не является единственным или основным заказчиком .NET-решений. А уж к Enterprise госсектор и вовсе имеет весьма опосредованное отношение.

    В-третьих, означенное "пересаживание" может запросто затянуться на долгие годы: школы вон тоже на Linux перевести хотели еще лет 8 назад, и что?

    Наконец, при желании легко найти лазейки. Скажем, разработанная система будет не устанавливаться в госконтору напрямую, а предоставляться некоей коммерческой организацией как сервис (по удачному совпадению эта организация будет явно или опосредованно принадлежать какому-нибудь чиновнику ;)).

    Одним словом, не беспокойтесь :)

    P.S. И что такого откатного в продвижении C#? Не откатнее остальных :)
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю работу индексов MySQL?

    @Maa-Kut
    Вот тут неплохо объяснено. Если кратко, то да, первыми лучше ставить столбцы, индекс по которым более селективен (т.е. на одно значение ключа приходится как можно меньше записей таблицы).
    Ответ написан
    Комментировать
  • Почему не очищается Context при Exception?

    @Maa-Kut
    Контекст во всех репозиториях один и тот же? Если так, то при ошибке сохранения сущности ее следует "отцепить" от контекста:
    db.Entity(item).State = EntityState.Detached;
    По идее, контекст после этого сущность отслеживать перестанет и уже не будет пытаться ее в базу пропихнуть.
    Ответ написан
  • Как разделить даты по месяцам в массиве?

    @Maa-Kut
    У вас newarr[m] не инициализирован на момент вызова push. Думаю, должно было быть что-то вроде:
    export default (arr) => {
        let newarr = {};
        let m = '00';
        arr.map((date, i) => {
            m = date.split('-')[1];
            if (!newarr[m])
            	newarr[m] = [];
            newarr[m].push(date);
        });
        return newarr;
    };
    Ответ написан
  • Программа выдает ошибку IndexOutOfRangeException. В чем причина и как бороться?

    @Maa-Kut
    Очень смахивает на проблему неправильного использования замыканий. Попробуйте так:
    for (int i = 0; i < qEquations; i++)
    {
        int index = i;
        system.EquationFunctions.Add(new Func<double[], double[], double>((x, beta) =>
            EquationFunction(x, beta, index)); // <-- index вместо i
    }
    Ответ написан
  • Как в js поменять цвет при условии?

    @Maa-Kut
    Если я правильно понял задумку (без HTML не совсем понятно), то, наверное, как-то так:
    $('.value').each(function() {
        var val = parseInt($(this).text());
        if (val >= curVal)
            $(this).css('color', 'red');
    });
    Ответ написан
  • Как правильно хранить структуру c#?

    @Maa-Kut
    Поскольку речь идет именно о структурах, второй вариант не имеет смысла, т.к. из словаря все равно будут возвращаться копии сохраненных в словаре структур: в C# структуры - это value type.

    Ну и на будущее: если уж идти вторым путем, то надо активнее использовать инкапсуляцию. Т.е. инициализацию поля spravochnik и получение значения из него надо выполнять непосредственно в классе pogreb. Наружу класс должен выставить не публичное поле (публичные поля - почти всегда зло), а метод или свойство, которые будут проверять/инициализировать sparovochnik и искать в нем значение.
    Ответ написан
    2 комментария
  • Есть ли такой реализованный список на C#?

    @Maa-Kut
    Как вариант, можно использовать MemoryCache: stackoverflow.com/questions/7435832/c-sharp-list-w...
    Ответ написан
    Комментировать
  • Какого выбрать издателя мобильных игр?

    @Maa-Kut
    Вот только недавно была статейка на хабре в тему: https://habrahabr.ru/post/301846/. Суть, кратко, такова, что издателей много, и среди них есть много недобросовестных. Так что нужно очень внимательно читать все соглашения и договоры, особенно мелкий шрифт.
    Ответ написан
    Комментировать
  • Можно ли передать что-то на обработку в Go из PHP?

    @Maa-Kut
    Советую задаться вопросом: у вас настолько много текстовой обработки и она настолько сильно тормозит? Дело в том, что вызов чего-либо exec'ом и или через предложенный тов. evnuh ZeroMQ - штука отнюдь не бесплатная. Есть серьезный риск, что накладные расходы на обращения к внешним программам перекроют все выгоды.

    Иными словами, если у вас там просто накапливается большой пул строк, которые можно одним пакетом передать на внешнюю обработку - есть смысл париться. А вот если ваша цель - заменить кучу разбросанных по коду preg_match'ей (или что там в пыхе) на свою функцию, "ускоренную" Go или Python'ом, то не советую.
    Ответ написан
  • Почему все игры не пишут на Unity?

    @Maa-Kut
    Зачем вообще делать что-то свое, если уже есть что-то готовое? Вариантов вижу три:

    1. NIH-синдром. Разработчик чисто из принципа старается использовать только то, что сам создал, минимально привлекая сторонние разработки/инструменты. Логику тут искать, как правило, бессмысленно.

    2. "Свое" решение появилось раньше другого готового. В мире существует немало игровых движков, созданных еще до Unity. Собственная разработка уже давно используется, она отлажена и проверена временем, под нее много всего понаделано; выкидывать ее на помойку ради какого-то новомодного Unity откровенно жалко.

    3. Готовое решение не отвечает всем требованиям. Скажем, для какой-то конкретной игрушки Unity слишком тяжелый, или же не поддерживает каких-то очень нужных фич, или поддерживает, но недостаточно хорошо (ресурсов слишком много жрет). "Свой" движок под конкретную игру может быть заточен лучше, что автоматом даст конкурентное преимущество перед другими играми, сделанными на Unity.
    Ответ написан
    Комментировать
  • Как динамически генерировать условия в Entity Framewrok?

    @Maa-Kut
    Да просто докидывать их к IQueryable:

    IQueryable<Person> query = context.Persons;
    
    if (searchByFirstName)
        query = query.Where(x => x.FirstName == someFirstName);
    
    if (searchByAge)
        query = query.Where(x => x.Age == someAge);
    
    var persons = query.ToList();


    При генерации SQL-запроса все эти отдельные условия соберутся в один красивый WHERE.

    Другой вариант: собирать Linq Expression'ы. Способ более гибкий, но более сложный. Почитать, скажем, можно тут: https://msdn.microsoft.com/en-us/library/mt654267.aspx.
    Ответ написан
    Комментировать
  • Как выбрать определённую запись?

    @Maa-Kut
    Будет что-то вроде:
    SELECT * FROM the_table LIMIT 5,1;
    Только нужно еще обязательно ORDER BY правильный, иначе порядок строк начнет плавать, и значение вернется уже какое-то другое.

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

    @Maa-Kut
    $('<div/>', { ... }).insertAfter("ul.map-visible-list").data('toggle', 'modal').data('target', "#modal-map-body");
    Ответ написан
    Комментировать
  • Получение имена база данных из MSSQL?

    @Maa-Kut
    Список баз данных можно получить из sysdatabases:
    SELECT [name] FROM master.dbo.sysdatabases;

    Список таблиц - ну, скажем, из sys.tables:
    SELECT [name] FROM sys.tables;
    Ответ написан
    3 комментария
  • Как забрать исходный код у разработчика?

    @Maa-Kut
    У фрилансера в личной жизни все настолько плохо, что он текущую версию отдать не может? Если он адекватный, то ведь можно просто попросить выслать имеющиеся наработки в любом удобном виде.

    Альтернативный вариант: он ведь на какой-то хостинг сайт для демонстрации выкладывает? Если у вас есть к нему (хостингу) доступ, то можно все утащить оттуда.
    Ответ написан
    Комментировать