Ответы пользователя по тегу C#
  • Возможна ли полноценная разработка под .net на MonoDevelop?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Скажу так, успешные случаи существуют. Например, я разрабатываю все side-проекты под Mac OS в Xamarin Studio (аналог MonoDevelop). Но это все либо консольные, либо web-приложения. В частности, я делал сайт на MVC 4 + MySQL + Memcached и он успешно крутился потом под Ubuntu. Проблем с P/Invoke (обработка изображений через libfreeimage) тоже не заметил. Работал и с другими БД — MongoDB и Postgres, тоже без нареканий.
    На сегодняшний день есть трудности с хорошим web-сервером под Mono (у меня был HyperFastCGI), но на новой платформе с OWIN должно быть лучше — уже есть быстрые реализации.
    В Mono 4.0 сейчас заменяют собственные реализации в BCL на майкрософтовские, что дает основания ожидать идентичного поведения.
    Что до самой среды разработки, VS + Resharper, конечно, мощнее, чем MonoDevelop. И расширений под студию куда больше, и дебаггер удобнее и функциональнее. Но сам процесс написания кода в MonoDevelop лично мне нравится.
    vNext я пока глубоко не копал (за что мне стыдно), но выглядит он многообещающе, опять же, для консоли и web. Насколько я понимаю, WPF портировать никто не собирается.
    Ответ написан
    1 комментарий
  • Можно ли использовать Model для взаимодействия с View вместо ViewModel?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Лично я сторонник такого разделения в силу практики Separation Of Concerns.
    Я даже разделяю модель, модель представления и модель запроса (данные, пришедшие от пользователя).
    Я люблю, когда объекты домена представляют собой POCO-классы, как правило, неизменяемые — с readonly-полями и валидацией всего в конструкторе. Для получения данных от пользователя я использую отдельные классы с атрибутами валидации, автосвойствами и автоматическим связыванием. Если все хорошо, я просто делаю маппинг в доменный объект и сохранение.
    Модель представления нужна, если она комбинирует несколько доменных объектов, содержит данные, нужные только представлению, и так далее. В простых случаях возможно передавать во View сам доменный объект.
    Вышесказанное имеет смысл при разработке серьезных приложений. Для простых сайтов на коленке лучше разделение не использовать, или использовать его только там, где это действительно нужно. Минусы заключаются, собственно, в дополнительном количестве кода, который приходится писать и поддерживать. Плюсы — в четком разграничении ответственности и дисциплине.
    Ответ написан
    4 комментария
  • Правильно ли Entity Framework создал модель?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Если у вас во вспомогательной таблице нет иных столбцов, кроме ключей родителя и потомка, то модель сгенерирована правильно.
    Ответ написан
    Комментировать
  • Как в entity framework загрузить и обработать файлы?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Сделайте в модели свойство типа byte[], а таблице — столбец типа varbinary(max) или image. Вот здесь, например, есть ответ на подобный вопрос.
    Ответ написан
    Комментировать
  • Как называется архитектура с несколькими серверами и одной базой?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    В терминологии Microsoft развертывание web-приложения на нескольких серверах именуется Web Farm. Даже framework для них сделали. Про конфигурацию еще здесь можно почитать, ну и вообще в Google по запросу «configure web farm».
    Про базу данных — MongoDB замечательно масштабируется по горизонтали, начать можно с репликации, это даст масштабирование на чтение, при необходимости организовать распределенный кластер.
    Ответ написан
    Комментировать
  • Узнать URL страницы?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Ох, уж эти Web Forms!
    Думаю, для понимания механизма достаточно будет открыть вкладку Network dev-консоли Chrome, понажимать разные кнопки и посмотреть, какие запросы отправляются.
    За выполнение действий по postback отвечают поля __EVENTTARGET и __EVENTARGUMENT POST-запроса. Сценарий рисуется примерно такой:
    1. Отправляем POST-запрос к странице с аргументами для установки размера страницы в 100 записей (нужные аргументы можно взять из консоли, взять их из страницы, навскидку, непросто).
    2. Парсим email'ы.
    3. Ищем ссылку на следующую страницу. Нам интересны ссылки (a), расположенные внутри блока с классом .rgNumPart. Пейджер отображается дважды, поэтому берем только первый блок.
    4. Находим в нем элемент a, следующий за a.rgCurrentPage. Если такого нет, мы просмотрели список до конца.
    5. Из атрибута href ссылки регуляркой достаем идентификатор вроде ctl00$MainContent$RadGrid1$ctl00$ctl03$ctl01$ctl03. Это будет новый __EVENTTARGET.
    6. Отправляем новый POST-запрос с новыми аргументами, переходим к шагу 2.
    Ответ написан
  • Нарушение порядка запросов страницы, баг браузера или сервера?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    А на мой взгляд, тут банальное race condition. Когда мы зажимаем F5, несколько запросов теоретически могут одновременно попасть в конвейер обработки.
    Попробуйте поместить указанные операции в критическую секцию:
    lock (Session.SyncRoot) {
        if (Session["a"] == null)
            Session["a"] = a;
        else { 
            Session["a"] = (int)Session["a"] + 1;
            a = (int)Session["a"];
        }
    }


    И я бы сделал так, а то у вас три операции чтения, хотя нужна только одна:
    var storedValue = Session["a"];
    a = (storedValue == null) ? a : (int)storedValue + 1;
    Session["a"] = a;
    Ответ написан
    Комментировать