Ответы пользователя по тегу .NET
  • ASP.NET Core: чего нет в .Net Core в сравнении с .Net Framework?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день! Из собственного опыта: в .NET Core отсутствует подсистема работы с графикой (System.Drawing, кажется). Т.е. если Вы вдруг на стороне сервера решите формировать, скажем, капчу, то у Вас это не получится. Также неполная поддержка рефлексии (в частности, отсутствует класс StackFrame).
    Ответ написан
    Комментировать
  • Объясните как правильно применять паттерн Repository с Entity Framework?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день! Думаю, очень похожий вопрос: Я не умею готовить репозиторий или он просто не очень?
    От себя. Лепить репозитории на каждую сущность выгодно, как мне кажется, только когда этих сущностей раз-два-три и закончились, а проект никогда не будет сопровождаться. В enterprise-решениях следование принципу "1 репозиторий на 1 сущность" приведет к сложностям сопровождения и масштабируемости приложения.
    Ответ написан
    Комментировать
  • C#. Где может быть полезна явная реализация интерфейса?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день! Интерфейсы (как и абстрактные классы) позволяют (с точки зрения архитектуры) Вам разрабатывать слабо связанные приложения. Это, в свою очередь, приводит к тому, что: 1) внести изменения в код становится проще; 2) приложение не зависит от конкретных реализаций, а зависит от абстракций.
    Ответ написан
    2 комментария
  • Как защитить ASP.NET MVC приложение от администратора?

    Valeriy1991
    @Valeriy1991 Автор вопроса
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Коллеги, в принципе, можно отнести это к решению вопроса - в Visual Studio при публикации ASP.NET приложения в настройках Publish'а есть такая опция - "Precompile during publish". При конфигурировании этой опции снимается галочка с "Allow precompiled site to be updatable" + можно поиграться с блоком "Merge option". Эта галочка способствует тому, что все View при публикации будут преобразованы в *.dll файлы, а блок "Merge option", насколько я понял, позволяет настроить различные способы этого преобразования View -> dll. Решение пока отмечать не буду - хотелось бы услышать еще варианты и "поиграться" с этими настройками публикации.
    Ответ написан
    Комментировать
  • Как зашифровать (обфускатор) код в c#?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день!

    Как вариант - написать свой обфускатор (на полном серьезе). Например, строки можно кодировать в Юникод (вида \u0024), добавлять рандомно кучу комментариев, точек с запятыми, переименовать все переменные в переменные с бредовыми названиями, используя Guid.NewGuid(). Например:
    было:
    private string _appName = "MyApp";
    стало:
    private string 2D63C163DBAF484E8B2286DCD3BE3FD4= "\u0023\u0054"; // как-то так

    Можно вдобавок удалить все #region'ы и #endregion'ы, сделать так, чтобы всё содержимое *.cs файлов было в 1 строку (только это не работает, если у Вас есть директивы препроцессора: #if, #endif и др. - эти директивы обязательно должны быть на новой строке), удалить все нормальные комментарии (которые оставляли разработчики), добавлять какой-нибудь ненужный код в виде циклов.

    Удачи!
    Ответ написан
    6 комментариев
  • Как организовать архитектуру приложений "Система управления проектами"?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день!

    Хотелось бы добавить про контексты EF: stackoverflow.com/questions/9415955/c-sharp-workin...

    Поясню: когда я впервые столкнулся с масштабным применением EF, в том проекте использовался класс, в котором в виде поля объявлялся контекст. Т.е. контекст EF существовал все время, пока существовал этот класс (DataService). Так вот: все было хорошо до тех пор, пока не пришлось заняться ускорением работы приложения. И обнаружилось, что такой подход практически не позволяет использовать библиотеку TPL (Task Parallel Library), т.к. постоянно возникали ошибки, связанные с тем, что "контекст уже открыт". Ни в коем случае не используйте контекст EF по паттерну "Одиночка" и в статическом классе - наберетесь больших проблем и замучаетесь исправлять ошибки. Исходя из своего опыта (а также опыта моих коллег и друзей), пока что самым удачным применением EF является (как и написано в статье) использование контекста с коротким жизненным циклом, т.е. написали метод (который, например, получает список городов из БД и который, соответственно, будет внутри слоя доступа к данным), внутри инициализируем контекст (лучше с помощью using), получаем данные, оборачиваем их в модель (если надо), закрываем контекст и возвращаем данные наверх.

    P.S. Хотелось бы также порекомендовать Вам НЕ работать с классами, генерируемыми EF, в слое бизнес-логики, а писать для этих классов обертки (модели). В одном из проектов, которыми я занимался, используется WPF + MVVM + IoC (Unity Container), и в нем же весь интерфейс биндится к классам EF... Поверьте, это ужасно. Лучше сразу проектируйте так, чтобы классы EF у Вас использовались только внутри слоя доступа к данным, а наверху (в бизнес логике) вся работа ведется с классами-обертками над классами EF (т.е. чтобы классы слоя бизнес-логики ничего не знали о классах EF). В этом еще и такой плюс, что если Вы по каким-либо причинам решите отказаться от EF и перейти, например, на NHibernate или Native Sql, то все изменения коснутся только слоя доступа к данным.
    Ответ написан
    Комментировать
  • Как лучше реализовать ежедневное обновление курсов валют в БД для ASP.NET MVC?

    Valeriy1991
    @Valeriy1991 Автор вопроса
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    В итоге с другом нашли альтернативное решение.
    Написали консольное приложение, которое берет последние курсы валют с сервиса ЦБ РФ и вызывает хранимую процедуру из БД, которая принимает табличный тип и обновляет курсы валют в БД. В текущей используемой панели управления хостингом имеется инструмент "планировщик задач" (в-общем, планировщик Windows). В настройках указали путь к консольному приложению, выставили периодический запуск этого приложения 1 раз в сутки - и вуаля! Задача решена.

    И тем не менее, спасибо всем за ответы.
    Ответ написан
    Комментировать
  • Как получить один из передаваемых параметров?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день!

    Возможно, вопрос еще актуален, поэтому отвечу.
    Для передачи параметра в метод действия Вам необходимо, чтобы сам метод действия принимал этот параметр (как правильно указал chydaya):
    public ActionResult Dialog(string dataDialogId)
    {
    	//...
    	return View();
    }


    Прописывать значения параметров в маршруте вовсе необязательно. Т.е. маршрут может быть стандартным:
    routes.MapRoute(
    	name: "Default",
    	url: "{controller}/{action}",
    	defaults: new { controller = "Home", action = "Index" }
    );


    Если Вы для разработки используете Visual Studio, то при вводе "Html.ActionLink(" у Вас сразу срабатывает IntelliSense, которая подсказывает, какие входные параметры есть у этого метода. И если внимательно присмотреться, то, как верно заметил Vadimyan, у него есть различные перегрузки, и в некоторых есть параметр object routeValues - это то, что Вам нужно. Именно в этом параметре Вы указываете переменные для метода действия, например, так:
    @Html.ActionLink("Вход", "Dialog", new { dataDialogId = "entry" })


    В Вашем примере, который Вы указали в вопросе:
    @Html.ActionLink("Вход", "Dialog", null,
    
                                   new
                                   {
                                       @class = "openDialog",
                                       data_dialog_id = "entry",
                                       data_dialog_title = "Вход",
                                       data_dialog_width = "auto",
                                       data_dialog_height = "auto"
                                   })

    Вы задаете html-атрибуты, а в качестве переменных маршрута у Вас стоит null. Сгенерированная html-разметка у Вас будет иметь следующий вид:
    <a href="/{какой-то контроллер}/Dialog" class="openDialog" data_dialog_id = "entry" data_dialog_title = "Вход" data_dialog_width = "auto" data_dialog_height = "auto">Вход</a>


    Общая рекомендация
    Потратьте время, чтобы от и до изучить MVC по книге "ASP.NET MVC3 Framework с примерами на C# для профессионалов". Это фундамент, и даже на asp.net Вы не найдете настолько подробной информации о том, как работает и как правильно работать с ASP.NET MVC. Я пользовался туториалами (еще по WebForms + EntityFramework) с сайта asp.net, но они направлены на то, чтобы "прочитал туториал и начал делать". Однако если Вы хотите грамотно разрабатывать на ASP.NET MVC, начните с изучения основ и фундамента.

    Надеюсь, я Вам немного помог.
    Успехов!
    Ответ написан
    Комментировать
  • Посоветуйте курсы по ASP.NET в Москве

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый день! Отвечу несмотря на то, что вопрос задан в далеком 2012. В свое время посещал курс "Программирование на C#" в учебном центре "Специалист" при МГТУ им. Баумана - specialist.ru. Мне понравилось, поэтому могу посоветовать этот учебный центр. Список всех курсов по Visual Studio - www.specialist.ru/product/visual-studio-courses.
    Ответ написан
    Комментировать