Ответы пользователя по тегу ASP.NET
  • Есть ли более красивое решение для реализации такой системы?

    Nipheris
    @Nipheris Куратор тега C#
    Если планируется использовать дотнет (как для "процессов", так и для сайта), то имеет смысл использовать преимущества платформы. Я бы поступил следующим образом:
    - на ASP.NET реализовать логику сайта + бизнес-логику; здесь же - постановку "заказов" в очередь контроллера;
    - отдельный процесс операционной системы - контроллер (хост) для выполняющихся "процессов"; каждый такой контроллер (их может быть несколько) загружает в отдельный домены приложения (application domain) сборку/сборки с кодом "процесса", настраивая ему права доступа к окружающей системе (песочницу); т.о., при постановки задачи в очередь конкретному контроллеру (выбирать можно рандомно или по загруженности), последний, при готовности, создает домен приложения, грузит в него нужную сборку-плагин, и запускает код на выполнение с нужными параметрами.
    - код "процессов" оформлять в виде дотнетовских сборок; оформить интерфейс, который будет реализован каждой сборкой;
    - прогресс можно конечно писать в БД, но можно и не писать: правильно работающий контроллер может и сам докладывать о состоянии выполнения наиболее актуальные сведения; в тот же интерфейс, через который контроллеру отдаются в очередь задачи, можно добавить и возможность запроса состояния выполнения; на клиенте брать по ajax, только конечно не в цикле, а по таймеру.
    - в базу можно и нужно писать время старта/завершения задачи, результат (успех/ошибка) и т.д.;

    такая архитектура позволит вам выделить отдельные машины для сайта, отдельные - для исполнения, наращивать количество контроллеров "процессов" и количество машин, обслуживающих сам сайт.
    Ответ написан
    Комментировать
  • Чем отличается Parallel от Thread?

    Nipheris
    @Nipheris Куратор тега C#
    Я бы сказал, что методы в Parallel работает на более высоком уровне абстракции, т.к. используя их нет необходимости непосредственно заботиться о создании и поддержке потоков для вычислений. Собственно Parallel используют Task-и, а таски - это абстракция для асинхронных вычислений. Таск можно выполнить как в своем потоке, так и в другом, поэтому использование потоков - один из вариантов выполнения таска. Сам класс Thread это не более чем обертка над системными потоками с соответствием один-к-одному.
    Ответ написан
    2 комментария
  • Можно ли использовать Model для взаимодействия с View вместо ViewModel?

    Nipheris
    @Nipheris Куратор тега C#
    Плюс в том, что структуру и интерфейс модели в больших проектах не хочется делать зависимым от вьюхи в какой бы ни было степени. Вот смотрите, у вас например есть атрибут Display или StringLength - зачастую такие вещи излишни в бизнес-модели. С этой моделью, возможно, будет работать код, вообще не имеющий ничего общего с выводом данных пользователю, например какой-нибудь фоновый бот или сборщик статистики. Или, что чаще встречается, с этой же моделью будет работать совершенно другое представление - например одна вьюха у вас "для всех", т.е. для клиентов, к примеру, интернет-магазина, а другая - для работников, которые обслуживают заказы. И у них те же данные о клиентах и заказах будут выводиться совершенно иначе.
    Поэтому как правило удобнее иметь промежуточный слой в виде ViewModel, которая "приближает" данные общей модели к конкретному представлению. Я, например, часто делаю именно во ViewModel различные вычисляемые свойства, которые нужно вывести куда-нибудь, да хоть в таблицу. Т.е. в бизнес-модели у меня расход топлива на километр, и пройденный путь, а во ViewModel помимо этого еще и общий расход топлива на текущий момент времени (который, разумеется, рассчитывается на лету).
    Ответ написан
    2 комментария
  • Как работают Action в Контроллерах когда к ним обращаются сразу несколько пользователей?

    Nipheris
    @Nipheris Куратор тега C#
    Никаких lock-ов в экшене не будет (если вы их сами туда не поставите), и не нужно им там быть. Дефолтовая фабрика контроллеров создает инстанс контроллера на каждый запрос, поэтому 99 пользователей одного ждать не будут. Если нужны подробности - ищите в гугле "asp.net mvc controller instancing", вываливается масса статей с которых можно начать разбираться.
    Ответ написан
  • Какую студию использовать?

    Nipheris
    @Nipheris Куратор тега C#
    Сидим до сих пор на 2008-й студии (большой проект на C++), пытались перейти года два назад на 2012-ю, но не смогли из-за проблем поддержки продукта под Windows XP - были проблемы с работой рантаймов. Майкрософт их потом вроде пофиксил, но мы уже не стали второй раз пытаться. Теперь ждем, когда пользователи слезут с XP. А в 2012-й только дампы смотрим и профайлимся.

    C .NET-ом в этом плане намного проще, в студии сейчас есть возможность выбирать в качестве целевой платформы любой фреймворк, начиная с 2.0, поэтому обновиться в большинстве случаев не проблема.
    Ответ написан
    Комментировать