Ответы пользователя по тегу C#
  • "Бесшовная" установка веб-сервиса на C# в продакшн - как?

    Если в двух словах, то ввести дополнительный слой абстракции - шину. Клиент делает запрос к шине, которая в свою очередь опрашивает инстансы доступных WCF-сервисов. Пока инстанс WCF1 обновляется, шина перенаправляет запрос на резервный WCF2. После деплоя обновления на WCF1 - переключаемся уже на обновленный сервис.
    Ответ написан
    1 комментарий
  • Зачем нужен Async Await в C#?

    Асинхронность - это про конкурентность исполнения. Многопоточность - про несколько потоков.

    Асинхронность - это ты проснулся, поставил чайник, пошёл в душ. Услышал писк - вернулся, заварил чай и продолжил чистить зубы.

    Многопоточность - это ты проснулся, пошёл в душ, а твоя девушка поставила чайник.
    Ответ написан
    2 комментария
  • Как правильно построить linq с подзапросом?

    Вы ищете что-то вроде этого?
    from p in context.ParentTable
    join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
    from j2 in j1.DefaultIfEmpty()
    group j2 by p.ParentId into grouped
    select new { ParentId = grouped.Key, Count = grouped.Count(t=>t.ChildId != null) }

    https://stackoverflow.com/a/695510
    Ответ написан
  • Калькулятор на mvc с историей операций?

    Для лога можно использовать паттерн Memento: https://en.wikipedia.org/wiki/Memento_pattern
    Ответ написан
    Комментировать
  • Как реализовать аналог preg_match_all из PHP?

    Используйте Regex.Matches.
    Ответ написан
    Комментировать
  • Как развиваться .NET разработчику?

    1. попробовать в плюсы
    2. высоконагруженный проект, микросервисы, докер; одновременно можно и сменить платформу на java
    3. поботать f#...ну а что, вставляет хорошо после ООП и C#: https://fsharpforfunandprofit.com/
    3.1 там же можно и аналитику данных пощупать: https://fslab.org/
    Ответ написан
    Комментировать
  • Как начать проект на asp.net?

    Советую почитать Pro ASP.NET Core MVC 2
    Ответ написан
    Комментировать
  • C# Как правильно организовать код, с преобразованием моделей?

    Модели предпочитаю делить на доменные(то, что мапится к БД) и модели представления(то, что нужно отдать клиенту). Реляционная модель данных в большинстве случаев не кореллирует с моделью представления(в вашем случае, например, списки категорий и пр.)

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

    Обычно, использую такую декомпозицию слоев приложения:
    View -> Controller <-Service <- Repository <- Database

    Уровень Repository оперирует доменом, уровень Service оперирует как доменом, так и представлением, уровень Controller - только представлением. Соответсвенно, в уровне сервисов и производится преобразование домена в представление.
    Ответ написан
    6 комментариев
  • Как создать БД использую LINQ?

    Ух ты, даже готовые классы, чтобы меньше писать? Ну хоть на этом спасибо ))

    p/s есть готовые классы - используй Code-First подход. Не нужно никаких Raw Sql команд.

    Для EF:
    https://msdn.microsoft.com/en-us/library/jj193542(...
    https://metanit.com/sharp/entityframework/1.2.php

    Для EF Core
    https://docs.microsoft.com/en-us/ef/core/get-start...
    Ответ написан
    4 комментария
  • Как применять TDD при написании кода?

    Суть TDD "на пальцах":
    1. Написать тест на проектируемый кусок кода.
    2. С успехом "провалить" этот тест.
    3. Написать достаточно кода, чтобы пройти тест успешно.
    4. Отрефакторить получившийся код.

    И дальше все начинается сначала. Чтобы понять как это работает, предлагаю загуглить решение задачи FizzBuzz с применением TDD(на YouTube роликов полно, постов в блогах не меньше).

    Дальше можно уже почитать литературу по тестированию. Я бы посоветовал сначала что-то фундаментальное по теме тестов, например, The Art of the Unit Testing. Дело в том, что TDD это в первую очередь и одновременно "всего лишь" техника написания кода через тесты. И чтобы ее успешно применять, надо уметь писать эти самые тесты.

    В этой книге найдёте много полезного про тесты и их концепцию. Советы по TDD также присутствуют.
    Ответ написан
    Комментировать
  • Дадите хороший tutorial по WPF на английском?

    Ну вот, например, самое первое видео по релевантному запросу в youtube ведет к этому плэйлисту.
    Не смотрел, но судя по комментариям и соотношению like/dislike контент людям нравится. Последнее видео загружено недавно.

    p/s речь у ведущего норм :)
    Ответ написан
    1 комментарий
  • JSON в c#, как спарсить элементы?

    using Newtonsoft.Json;
    ...
    var result = JsonConvert.DeserializeObject<T>(json);


    Где T - класс, представляющий ваш объект JSON; json - собственно, строка JSON- формата на входе, которую нужно представить в виде объекта.

    p/s Любезно воспользовался источником на stackoverflow. Это было быстрее, чем написать приведенный выше код :)))

    p/p/s Объект, запрошенный в качестве примера, будет выглядеть так:
    class MyClass
    {
        public int Response { get;set; }
    }
    Ответ написан
    Комментировать
  • Влияет ли на что-нибудь ссылочное поле в структуре C#?

    Нужно быть осторожным при их копировании.

    В твоём случае, в поле myClass хранится ссылка на область памяти в куче. При копировании value type( к чему относится struct) создаётся просто новое значение на стеке.
    var a = 0;
    var b = a; //на стек помещается значение 0. Число есть число, ни на что не ссылается

    В копии структуры ссылочное поле инициализируется копией ссылки(а она ведет к тому же объекту на кучу) которая помещается на стек. Иными словами ты получишь поверхностную или shallow копию. При изменении свойств объекта ссылочного типа в одной структуре ты увидишь те же изменения и в поле копии.
    Ответ написан
    3 комментария
  • Кто может объяснить как работает данное условие?

    Строка вида: This is "bum" text. What a "nice weather" today с помощью .Split('"') разобьется на массив следующего вида:
    [0] - 'This is'
    [1] - 'bum'
    [2] - ' text. What a'
    [3] - 'nice weather'
    [4] - ' today'

    Каждый элемент массива с нечетным (if(min % 2 == 1)) индексом - слово в кавычках. Алгоритм довольно странный, на мой взгляд.
    Ответ написан
    2 комментария
  • Как в Asp Net Core подключиться к MS SQL Server и увидеть данные?

    Включить пакет SqlClient в файл project.json.

    {
        "dependencies": {
           ...//здесь идут ваши зависимости
            "System.Data.SqlClient": "4.1.0-*"//это нужно добавить
           ...
        }
      }
    }


    Сохранить изменения в файле. Подождать пока References проекта переопределятся.

    Затем все как обычно:
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
               connection.Open();
               using (SqlCommand command = new SqlCommand("SELECT * FROM dbo.Table", connection))
               {
                      var reader = command.ExecuteReader();
                      while(reader.Read())
                      {
                            var a = reader["Column"];//инициализация значения переменной полем из таблицы БД
                      }
               }
    }


    Примечание:
    connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=UserName;Password=Password;"))
    Ответ написан
    1 комментарий
  • Как создать вычислимое поле в модели Code First Entity Framework 6?

    Создать partial класс для сущности Document под именем Document.MyExtensionBlaBla.cs; добавить в него новое свойство TotalQuantity и определить логику его вычисления:

    public partial class Document
    {
         public decimal TotalQuantity => Rows.Sum(x => x.Quantity)
    }


    Впоследствии, к этому свойству можно обращаться из инстанса Document. Например, так:

    var totalSumByDocument = new dbCtx().Documents.Single(x => x.Id == id)).TotalQuantity;


    Где id - входной параметр искомого документа, представляющий собой его уникальный идентификатор.
    Ответ написан
    3 комментария
  • Где найти "грязный" проект, для того чтобы на нем поучиться рефакторить?

    Думаю, навык рефакторинга приходит естественным путем с тренировкой навыка написания грамотного кода. Все, что остается делать - познавать правила, и писать качественный код. Как только после этого Вам откроют проект с "плохим" кодом - сразу "зачешутся" руки: тут дублирование кода, здесь длинный метод, а вот здесь еще и слишком много ненужных локальных переменных...

    P.S. Полагаю, это челлендж ради челленджа находить проект под рефакторинг, чтобы улучшить этот навык.
    P.P.S. Если покопаться, можно и у себя найти парочку проектов, где можно бесконечно улучшать код.
    Ответ написан
    Комментировать
  • Как правильно работать с БД MS SQL в С#?

    Для начала я бы определисля с нагрузкой. Как часто пишутся данные, каким образом их нужно выбирать. Для большинства случаев, более оправдано использовать ORM. Еще лучше, использовать одну из популярных ORM(EF, NHibernate, etc.). Если у вас будет какой-то очень огромный проект с выдающимся количеством транзацикций по обработке данных в секунду, то здесь лучше pure SQL(или же компромисс: на сложные операции pure SQL, на шаблонные, коих в любом проекте предостаточноб ORM).

    ORM(например, в случае EF, который я использую) позволит избежать большей части "monkey job":
    -Запросы осуществляются к DbSet-ам(типизированными доменными моделями), что дает нам строгую типизацию => меньше ошибок.
    -Cами доменные модели наполняются виртуальными свойствами на связные сущности(для реализации one-to-one, one-to-manu, many-to-many отношений), что позволяет нам избавиться от кучи Join-ов в будущем.
    -Используя Linq to entity, мы можем возвращать в результате запроса нужный объект, что делает обход выборки результата проще(меньше лишних инициализаций => меньше кода => меньше возможных ошибок и багов).

    В общем, ORM экономит много времени(а, соответственно, ресурсов, нервов и т.д.). Да и никто не мешает потом использовать pure-SQL: в случае если ORM неоптимально конвертирует запрос в SQL и вы хотите его переписать. Впоследствии, все это(ORM, ADO.NET ... <любой другой источник данных>) оборачивается репозиторием - и получается у вас Dаtа Access Layer.

    Upd: исправлены опечатки.
    Ответ написан
    Комментировать
  • ASP .Net MVC своя система авторизации без Identity?

    Цикл жизни статичных переменных определяется циклом жизни приложения - это уже один минус. При перезагрузках вашего приложения нужно будет их восстанавливать. В случае хранения идентификационных данных в Session, либо в Db - этим моментом управляете Вы, определяя цикл жизни этих данных.

    Статичные переменные доступны только на одном сервере. Если Ваше приложение хостится на нескольких машинах, то опредленные переменные на одном сервере не доступны с другого.

    Статичные переменные доступны всем, т.е. являются глобальными в рамках App Domain. Думаю, это тоже о многом говорит. Придется делать костыли, боюсь представить какие, по доступу к ним; как-то параллелить клиентские запросы. В то время, как для Session есть Session concurrency

    В целом, если говорить об механизме Session, то скажу, что это понятные и широко распостраненные практики хранения идентификационных данных. Думаю, для большинства прикладных задач это вполне применимый подход. Если требуется больше безопасности, то уже смотрим в сторону Server-side для хранения состояния, например, в БД.
    Ответ написан
    Комментировать