• Куда развиваться в C#?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Го на работу устраиваться, а то так можно всю жизнь учиться.
    Ответ написан
  • Куда развиваться в C#?

    Nipheris
    @Nipheris Куратор тега C#
    с подсветкой синтаксиса

    хм, неплохо если вы его уже реально напишите.

    Собственно, что нужно читать, писать, смотреть, чтобы развиваться?

    Прикладное направление выберите для начала. Стандартный выбор на сегодня: веб-бэкенд/десктоп/игры/мобайл. Соответственно: ASP.NET 5ASP.NET Core 1.0/WPF/Unity/(UWP/Xamarin)
    Ответ написан
    4 комментария
  • Как можно спорить на тему "ASP.NET WebForms против ASP.NET MVC"? Ведь эти технологии ПЕРЕСЕКАЮТСЯ?

    yarosroman
    @yarosroman
    C# the best
    Поделитесь шишками.

    Технологии абсолютно разные, даже архитектура приложения разная. Единственное у них общее, это одно, ядро для обработки запросов и связи с IIS. Все. В WebForms грубо говоря, контролы, через канал связанны с обработчиками событий на сервере. В MVC главное это контроллеры с набором действий, которые могут вам отдавать код через шаблонизатор, файл или сериализованные данные. То, что обе технологии завязаны на System.Web можно в одном приложении применять обе технологии. О том, что это вещи разные, говорит то, что в новом ASP.NET 5 (не путать с версиями MVC) MS выпилили WebForms полностью, те создав MVC проект, вы не добавите в него ASPX файл.

    Странная логика у вас, не читая ничего, имея скромные навыки в этих технологиях, просто создав проект, добавив пару файлов, вы сделали вывод. Странно, очень даже
    Ответ написан
    7 комментариев
  • Как легче освоить внедрение зависимостей, code-first, TDD и паттерны?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый вечер! Спасибо за приглашение.
    На мой взгляд, Вам следует придерживаться следующих приоритетов по изучению:
    1. внедрение зависимостей более важно из Вашего списка, т.к. относится к SOLID принципам;
    2. TDD - на мой взгляд, вещь более нужная для изучения, чем code-first или patterns. Сам не так давно начал разрабатывать по TDD. Это очень здорово, что изобрели такой подход. Экономит тонну времени на ручное тестирование, а также дает быстрое понимание, что и где случайно (или неслучайно) сломалось. Главное - понимать, что покрывать тестами;
    3. третьим в список я бы добавил AngularJS или KnockoutJS или BackboneJS - сам пока что не изучил их и не начал применять, но судя по их популярности и преимуществам - думаю, Вам стоит с ними ознакомиться;
    4. code-first или database-first - не так уж и важно на Вашем этапе понимания. Главное отличие подхода Code-first: 1) модель пишется вручную, в связи с чем не нужно постоянно отслеживать edmx-диаграмму (т.е. можно считать, что Ваша code-first модель всегда находится в актуальном состоянии); 2) поддерживает миграции БД. В Database-first Вам нужно самому отслеживать актуальность состояния Вашей edmx-модели - с этим тоже могут быть проблемы. Опять же - только с опытом. С другой стороны, Database-first позволяет наглядно видеть Вашу модель, а вот Code-first - нет;
    5. паттернами тоже можете пока что голову не забивать. Безусловно, это нужно, но понимание их придет только с опытом (признаюсь честно: я сам не до конца все паттерны знаю и понимаю). На мой взгляд, важно соблюдать 1 основной паттерн - 3-уровневая архитектура (клиентский слой, слой бизнес-логики, слой работы с данными).

    Теперь по MVC.
    1. Model - тут, в принципе, всё просто: модель данных. Здесь можно поспорить, что иметь в виду под Моделью: модель самих данных или модель представления. Лично я после опыта работы с шаблоном MVVM в WPF под моделью данных в терминах ASP.NET MVC понимаю модель представления, а под термином "модель данных" - саму доменную модель (EF code-first, например). Кто-то может сказать, что это "лишняя работа" - по упаковыванию модели данных из EF-объектов в объекты модели представления. Да, частично соглашусь. Но зато это дает некую гарантию безопасности, что случайно пользователь не поменяет важную часть модели данных (например, ID).
    2. Контроллер. Основная задача контроллера - сформировать данные для отображения и передать эти данные в представление. Т.е. нужно стремиться к тому, чтобы код метода действия в контроллере содержал минимум кода. В идеале - вызов метода из слоя бизнес-логики и передача полученных данных в представление. Если Вы видите, что метод действия в контроллере содержит какую-то бизнес-логику, то это сигнал к рефакторингу: Ваш метод действия слишком много знает. По опыту могу добавить, что в среднем код метода действия содержит от 2 до 20-30 строк кода (с учетом того, что скобки { и } расположены на отдельных строках).
    3. Представление. Тут тоже всё просто: отобразить данные (из модели представления). Ни в коем случае нельзя в представлении писать логику по работе с самими данными, например, так делать нельзя:
    <div id="account">
        @{
            using(var db = new MyEfDbContext()
            {
                var userAccount = db.Accounts.FirstOrDefault(e => e.Username == User.Identity.Username);
                if(userAccount != null)
                {
                    @:Имя: @userAccount.Name
                    @:Фамилия: @userAccount.LastName
                }
            }
        }
    </div>


    Если у Вас 3-уровневая архитектура, например, есть слои:
    1. MyApp.MVC - MVC-application
    2. MyApp.BL - слой бизнес-логики
    3. MyApp.DAL - слой работы с данными
    то в представлении (View) вызывать напрямую сервисы бизнес-логики тоже нельзя, особенно, если Вы используете DI-принцип (внедрение зависимостей) и IoC контейнер. Т.е. такой пример недопустим:
    <div id="account">
        @{
            var accountService = new MyApp.BL.AccountService();
            var userAccount = accountService.GetUserAccountByUsername(User.Identity.Name);
            if(userAccount != null)
            {
                @:Имя: @userAccount.Name
                @:Фамилия: @userAccount.LastName
            }
        }
    </div>

    Попробую донести мысль архитектора и разработчика Александра Шевчука (преподавателя с http://itvdn.com): "Одна из главных целей при разработке - стремиться к упрощению системы". Ослабление зависимостей позволяет нам упрощать систему благодаря тому, что изменение осуществляется только на 1 каком-то слое/уровне. Если Вы во View вынесете логику по работе с данными, а уж тем более, как в примерах выше, работу с EF-контекстом, то Вы усилите зависимость одного компонента системы (MVC-слоя) от другого (слоя работы с данными или слоя бизнес-логики). Усиление зависимостей приводит к бОльшему числу изменений, что в свою очередь сказывается на повышении расходов на эту систему. Ослабление зависимостей приводит к меньшему числу изменений (например, при переходе от EF к native SQL или NHibernate затрагивается только слой работы с данными, а слой MVC и бизнес-логики не меняются), а значит, к более раннему выпуску системы или очередного релиза, и как следствие, снижение расходов (не только денежных, но и других ресурсов) на разработку. TDD тоже можно отнести к практикам, которые снижают затраты ресурсов на содержание системы. Но это я ушел в глобальное...

    Правильным будет подход, при котором у Вас снижается зависимость компонентов системы друг от друга, в случае с ASP.NET MVC приложением, на мой взгляд, это когда:
    - View знает о модели (я по прежнему буду иметь в виду модель представления - ViewModel, которые объявлены либо в MVC-слое, либо в слое бизнес-логики);
    - контроллер знает о слое бизнес-логики, обращается к нему за выполнением операций и получением ViewModel'ей, после чего передает во View полученную ViewModel (ну или JSON-данные);
    - Model формируется по принципу, грубо говоря, почти на каждую View своя модель.

    Фразу "правильным будет подход" я обосновываю тем, что у такого подхода есть масса плюсов (которые очевидны опытным разработчикам, но могут быть не до конца или неправильно поняты менее опытными коллегами, а именно):
    + View ничего не знает о доменной модели (только о ViewModel), благодаря чему Вы можете спокойно менять свою доменную модель, не внося изменений во View (см. выше про ослабление зависимостей и снижение количества связей). Также Вы спокойно можете перейти от EF к NHibernate или к native SQL, или использовать и то, и другое - View об этом никогда не узнает;
    + контроллер (да и весь MVC-слой) знает только о существовании слоя бизнес-логики, но ничего не знает о слое работы с данными.
    + если на View делать отдельную ViewModel, то это позволяет более полноценно управлять тем, что нужно показать пользователю. Т.е. дает возможность большего контроля отображаемых данных, повышает безопасность Вашего приложения (пользователь, например, не сможет изменить ID просматриваемой записи, если этого ID нет вообще в модели представления).

    Ну а вообще все зависит от задачи/проекта: нужно ли применять разбивку на слои или использовать ViewModel'и вместо обычных доменных моделей - надо думать над каждой ситуацией отдельно.

    P.S. На мой взгляд, литературу выбрали правильно - я тоже начинал изучение MVC с нее. Понравилась тем, что дается сначала общее описание и работа с ASP.NET MVC на сквозном примере. А потом идет более глубокое погружение в ASP.NET MVC. По разработке могу посоветовать блог Александра Бындю: blog.byndyu.ru Как мне кажется, там очень хорошо некоторые моменты разжевываются, в том числе SOLID, TDD, шаблон Repository, UnitOfWork и др.
    Ответ написан
    2 комментария
  • Как можно спорить на тему "ASP.NET WebForms против ASP.NET MVC"? Ведь эти технологии ПЕРЕСЕКАЮТСЯ?

    @dmitryKovalskiy
    программист средней руки
    Вы курнули чтоли? что за бред. Вы путаете технологии генерации страницы, цикл обработки запроса клиента , архитектуру в конце концов с одной стороны - и просто два разных шаблонизатора. Razor и ASPX - просто шаблонизаторы, вы можете и свой написать в теории. А вот WebForms и MVC в корне различные технологии. У них различно все начиная от концепции. Их можно использовать одновременно в одном приложении и на одном сайте, но это плохая практика и оправдана она только при миграции с WebForms на MVC
    Ответ написан
  • Как организовать хранение данных в c# WPF (программа - заучивание иностранных слов)?

    andrewpianykh
    @andrewpianykh
    Из нативного я бы рекомендовал Microsoft SQL Server Compact + EntityFramework.
    Иначе, как уже писали выше, XML/JSON. По удобству работы в целом без разницы, для XML - Linq to XML, для JSON - JSON.NET
    Ответ написан
    Комментировать
  • Как организовать хранение данных в c# WPF (программа - заучивание иностранных слов)?

    Для локальной базы может хватить и .mdb, провайдер вшит во все актуальные версии Windows.
    Можно выбрать и SQLite, на официальном сайте есть информация о том, какие библиотеки нужно таскать за проектом, чтобы он запускался на конечных машинах.
    Ответ написан
    Комментировать
  • Как работает C#?

    Nipheris
    @Nipheris Куратор тега C#
    А откуда берётся этот MSIL? Куда компилируются .cs?

    cs компилируются компилятором. Есть стандартный csc, поставляется вместе с .net framework (НЕ со студией). Это "классический" компилятор от MS, написан на C++, с закрытым исходным кодом. Такой же есть и для Visual Basic. Кроме них есть еще Roslyn-компиляторы C# и VB, они open-source, их главное отличие в том, что они сами написаны на управляемых языках. Это значит, что у вас есть compiler-as-a-service. Это, в свою очередь, значит, что если вы хотите написать тулзу, обрабатывающую тем или иным образом исходный код, например на C#, вам не нужно самому писать парсер/компилятор, вы можете подключить модули Roslyn-компилятора и пользоваться ТЕМ ЖЕ компилятором (лексером/парсером/etc), что и используется непосредственно при сборке приложения. С классическим компилятором так не получится, он представляет из себя черный ящик: cs на входе, сборка на выходе.

    Далее будем считать, что не учитываем в рассуждениях технологию .net native.
    в каком моменте тогда работает виртуальная машина

    она работает в момент запуска exe.
    почему мы получаем на выходе .exe

    в этом вопросе часто возникает путаница. Дело в том, что дотнетовские exe и dll - это т.н. сборки (assemblies), и они содержат метаданные и MSIL (!) исполняемый код. То, что у них расширения exe и dll - это потому, что MS для повышения совместимости и удобства использования, упаковала их в формат PE. Чтобы .net приложения можно было запускать также, как и нативные. НО реально в exe-файле есть только небольшой загрузчик, который запускает CLR, просит загрузить текущий файл как дотнет-сборку и передать управление на метод-точку входа. Почитайте про сборки в хорошей книге, и скачайте dotPeek, посмотрите что внутри дотнетовского exe. Это совсем не то, что в "обычном", нативном exe.

    В мире C# существуют также такие понятия как .NET, Mono, Roslyn и т.д., можете ли вы структурированно разъяснить их смысл?

    .NET это название и бренд платформы, .NET Framework, а теперь и .NET Core - реализации платформы от MS, Mono - open-source реализация НЕ от MS. .NET FW работает только на винде, .NET Core и Mono и на других платформах. Про Roslyn уже упомянул.
    Ответ написан
    Комментировать
  • Как работает C#?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    > Насколько я знаю, в Java есть JVM, которая загружает файлы .class, содержащие байт-код, и запускает их.
    Поправка: обычно не .class, а .jar. А вот внутри .jar (это архив) - уже файлы .class. Ведь .class, как ясно из названия, содержит только 1 класс, нечто вроде .obj в C++. А в приложении может быть и несколько классов, + цифровая подпись, + прочее. Вот всё это и линкуется в .jar.
    Один и тот же .jar работает везде там, где есть JVM в чистом виде. На десктопных линуксах работает. На Android не работает, там вместо этого .apk - другой формат.

    > Куда компилируются .cs?
    Гуглим csc.exe
    Обычно все операции осуществляются в нем, т.е. из .cs может делать сразу .exe. Хотя возможно сперва сделать IL (нечто вроде ассемблера, но пока еще НЕ байт-кода, т.е. НЕ бинарное), а вот IL уже скомпилировать в байт-код (бинарный формат) с оберткой exe.

    > В мире C# существуют также такие понятия как .NET, Mono, Roslyn и т.д., можете ли вы структурированно разъяснить их смысл?
    В .NET Framework входят:
    - компиляторы: для C# (тот самый csc.exe) и не только для C# (да, компиляторы именно входят в .NET, а не в Visual Studio);
    - тот самый CLR;
    - несколько библиотек классов, таких, как mscorlib.dll, System.Windows.Forms.dll (Winforms). библиотеки WPF. Такие библиотеки называются стандартными. Те библиотеки, которые в .NET не входят и их нужно таскать рядом с exe, называются сторонними (third-party), так как обычно они созданы не MS, а сторонними, "третьими", разработчиками.

    Mono - платформа, позиционируемая как кроссплатформенная альтернатива .NET Framework. То есть всё перечисленное там своё и от MS ничего нет. IDE также своя - MonoDevelop.
    На деле же, альтернатива эта от начала до конца очень сырая и вообще хилая. Например, Winforms/WPF там просто нету (может и можно прикрутить эти сборки из .NET, но на линуксе без вайна не заработает, да и MonoDevelop не содержит средств для удобной разработки под них). Вместо Winforms/WPF там GTK#, он реально кроссплатформенный, но до Winforms и тем более WPF ему очень далеко.

    Roslyn - какой-то новый компилятор от MS, вроде бы альтернатива старому csc.exe. Ничего интересного лично я в нем не вижу.
    Ответ написан
    1 комментарий
  • Как работает C#?

    Рекомендую книгу Рихтера "CLR via C#"
    Ответ написан
    Комментировать
  • Какая разница WebClient или Request + Response?

    @Melz
    Я не совсем понял вопрос, но HttpWebRequest дает контроль за заголовками и тд. Можно довольно сильно напортачить. Если у вас что-то хитрое то он ваш друг.

    Есть еще WebClient, это небольшая абстракция над HttpWebRequest для самых популярный действий. Меньше кода.

    Ну и на данный момент лучше брать HttpClient из NuGet. Легче тестировать код, можно мокить, async, мультитреды, еще фишки. Но только под .Net 4.5+

    Короч зависит от версии фреймворка и платформы.
    Ответ написан
    2 комментария
  • Начать изучение ASP.NET с 5-ой версии или с 4-ой?

    @abcyu
    Разработчик
    А почему бы с 1-й версии тогда не начать )))

    Если вам не срочно делать проект, если вам не нужно поддерживать старые проекты, то начинать можно с самой последней версии. Когда вы её более менее освоите, она как раз дозреет до частого применения в production.
    Ответ написан
    5 комментариев
  • С чего начать учить ASP.NET 5?

    Комментировать
  • Возможно ли "потоковое" скачивание множества файлов с сайта?

    @nirvimel
    Можно использовать TAR в качестве архива. Это дает:
    1. Нулевую дополнительную нагрузку на сервер по причине отсутствия компрессии.
    2. Возможность программно писать такой "архив" на лету прямо в открытое tcp соединение (со вставкой HTTP-заголовков в начале).
    3. Возможно даже написать докачку архива после обрыва соединения через "206 Partial Content" и "Content-Range:", также на лету, мгновенно, без переборки архива от начала. Это нетривиальная задача, но вполне решаемая.
    Ответ написан
    6 комментариев
  • Что почитать по таскам, потокам, async/await в c#?

    alex1t
    @alex1t
    .net developer
    blog.stephencleary.com/2012/02/async-and-await.html - Async and Await
    code.jonwagner.com/2012/09/06/best-practices-for-c... - BEST PRACTICES FOR C# ASYNC/AWAIT
    https://msdn.microsoft.com/en-us/magazine/jj991977.aspx - Best Practices in Asynchronous Programming
    https://msdn.microsoft.com/en-us/magazine/hh456402.aspx - Asynchronous Programming - Async Performance: Understanding the Costs of Async and Await

    Асинхронность в C# 5
    1. blogs.msdn.com/b/ruericlippert/archive/2010/12/13/...
    2. blogs.msdn.com/b/ruericlippert/archive/2010/12/14/...
    3. blogs.msdn.com/b/ruericlippert/archive/2010/12/15/...
    4. blogs.msdn.com/b/ruericlippert/archive/2010/12/16/...
    5. blogs.msdn.com/b/ruericlippert/archive/2010/12/17/...
    6. blogs.msdn.com/b/ruericlippert/archive/2010/12/18/...
    7. blogs.msdn.com/b/ruericlippert/archive/2010/12/20/...
    8. blogs.msdn.com/b/ruericlippert/archive/2010/12/21/...

    habrahabr.ru/post/257221 - Async/await в C#: подводные камни
    habrahabr.ru/post/261649 - Недопонимание про async/await и многопоточность в C#

    Ещё:
    blogs.msdn.com/b/pfxteam/archive/2012/03/24/102872... - Should I expose asynchronous wrappers for synchronous methods?
    blogs.msdn.com/b/pfxteam/archive/2012/04/13/102936... - Should I expose synchronous wrappers for asynchronous methods?

    Видео: https://channel9.msdn.com/Series/Three-Essential-T... - Six Essential Tips for Async
    Ответ написан
    Комментировать
  • Где можно почитать про разметку отчётов?

    Про разметку страниц стоит почитать вот тут:
    https://community.dynamics.com/crm/b/magnetismsolu...
    https://msdn.microsoft.com/en-us/library/ee210530.aspx
    www.magnetismsolutions.com/blog/nathaneccles/2013/...

    Был опыт работы с большим отчетом(примерно 40 страниц). Необходимо было его Сделать так, чтобы корректно печатался.
    Работа с таблицами - самая не приятная в целом. Нельзя сказать сколько места она займет. По-ощущениям зависит от размера данных в датасете, связанного с таблицей, только этот размер мы нигде не видим(некий прогнозный).

    Если необходимо четко разделять по-странично, то эмпирический метод и статьи, что я прислал выше(может быть еще вложенные в них имеет смысл посмотреть, давно это было - плохо помню). Советую просмотр в режиме "печати" в VS, там видно сколько на самом деле листов. Исходя из этого можно уже изменять размеры, двигать блоки и прочее прочее. Потенциальных проблем - очень много, все так и не опишешь.
    Ответ написан
    Комментировать
  • Открыть полное изображение щёлкнув по миниатюре в отчёте. Как?

    IamKarlson
    @IamKarlson
    ASP(?).NET, SQL-разработчик
    Это очень популярный вопрос, ума не приложу как вы не нашли ответ на него в гугле
    Ответ написан
    1 комментарий
  • Что почитать по таскам, потокам, async/await в c#?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    1) Concurrency in C# Cookbook
    2) Async in C# 5.0

    первую - обязательно, вторую - по желанию, сразу становится всё на свои места
    удобное изложение: проблема-решение-пример
    Ответ написан
    1 комментарий