• Entity Framework, Many to Many, почему создается лишняя запись?

    @serber
    Я думаю тут следует не создавать объект countries, а получать ее из базы
    ICollection<countries> countries = _countriesRepository.Get(...);
    
    people peoplepdto = new people()
                {
                    birthplace = "Уфа",
                    date_birth = DateTime.Today,
                    full_name = "Иванов Иван Иванович",
                    guid = Guid.NewGuid().ToString(),
                    sex = "М",                           
                    countries = countries
                };
    Ответ написан
    Комментировать
  • Чем грозит сильная связанность между слоями для приложения?

    @Maa-Kut
    Очевидно, в первую очередь она грозит все нарастающими сложностями по мере развития и роста приложения: чем больше внутри связей, тем труднее их отслеживать и учитывать. Как итог, внесение правок в тот или иной слой или компонент системы влечет собой трудопрогнозируемые изменения в поведении не только этого компонента, но и ряда других, с ним как-то связанных. По сути, это касается не только слоев как таковых, но и функциональных блоков внутри них.

    Притча в тему:
    Маркетолог спрашивает программиста: в чём сложность поддержки большого проекта?

    Программист: ну представь, что ты писатель и поддерживаешь проект «Война и мир». У тебя ТЗ — написать главу как Наташа Ростова гуляла под дождём по парку. Ты пишешь «шёл дождь», сохраняешь, вылетает сообщение об ошибке «Наташа Ростова умерла, продолжение невозможно». Почему умерла? Начинаешь разбираться. Выясняется, что у Пьера Безухова скользкие туфли, он упал, его пистолет ударился о землю и выстрелил в столб, а пуля от столба срикошетила в Наташу. Что делать? Зарядить пистолет холостыми? Поменять туфли? Решили убрать столб. Получаем сообщение «Поручик Ржевский умер.» Выясняется, что он в следующей главе облокачивается о столб, которого уже нет…


    Потом, есть еще традиционный вопрос заменяемости компонентов. Скажем, сегодня у нас View - это веб-интерфейс. А завтра заказчик захотел, скажем, десктопный клиент или клиент в виде Android-приложения. А у нас уже Business на веб завязан. Или Data использует какой-нибудь NHibernate, который захотели заменить на EF. Но фиг там - в Business вовсю хвосты NHibernate торчат, и теперь надо полсистемы переписывать.
    Ответ написан
    1 комментарий
  • Делегаты путаница в названии?

    @Maa-Kut
    Судя по всему, речь в обоих случаях идет о multicast delegates; таким образом, да, одно и то же. Хотя, конечно, было бы интересно взглянуть на код, чтобы точнее понять, что именно подразумевал автор каждого из терминов.
    Ответ написан
    2 комментария
  • Как правильно писать тесты?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1. Начните читать книгу Роя про "Art of Unit testing" уже есть 2 редакция
    2. Прочитайте комментарий на ru_SO

    теперь касательно ваших методов. К примеру я увидел такой лог выполнения тестов:
    AddData_ShouldReturnError() - Failed
    AddData_ShouldReturnException() - Failed


    Что должен заключить из этих ошибок?

    Пытаюсь читать название теста: "Метод AddData должен вернуть ошибку".
    Что произошло мне непонятно. Одни вопросы:
    * Какие тестовые данные подаются?
    * Какое вообще исходное состояние?
    * Что принято считать ошибкой? Может быть запись в логе об ошибке, а может быть некорректное значение возвращаемое методом? А может метод должен возвращать False в случае ошибки?

    Вот пример, к чему нужно стремиться:

    InvalidAdminToken_UsersRequest_ListIsEmpty

    Название теста следует схеме именования:

    [When]_[Act]_[Then]

    Договорившись с командой или самим собою о схеме именования тестов можно читать имя так:
    Тест: Неправильный токен подается в запросе для получения пользователей и должны получить пустой список.

    Если вдруг упало, то вы сразу поймете, что список не пустой! Потому что тестовый метод содержит только и только assert-ы, таким образом ваш тестируемый код выполняемый в Act-части неверный!

    *UPD*

    Любой модульный тест должен работать согласно паттерну проектирования AAA - Arrange -> Act - > Assert. Т.е. Подготовка к тестированию - Выполнение проверяемого кода - Проверка результатов.

    Технически работа модульного теста организовывается так:

    setUp() - это подготовка к тестированию, т.е. Arrange
    test() - Здесь Act и Assert

    Да, в модульном тесте подготовка пишется только и только в setUp() методе! Ошибка в подготовке тест-среды не должно влиять на сам тестовый метод.

    Тестовый метод это не подготовка результата, это проверка РАБОТЫ вашего БОЕВОГО кода.
    Это важно. Очень часто вижу, когда в тест-методы суют небольшие куски кода подготавливающие тест.данные. Это неправильно!!!

    Тестовый метод это:
    Первым делом выполнить боевой код. Ради него радимого и пишется тестовый метод.
    Вторым делом один assert . Да, тестовый метод должен содержать ТОЛЬКО и только одну проверку!

    Другими словами не должно быть такого:
    assertTrue(usersList is not None)
    assertTrue(usersList.isEmpty)
    Ответ написан
    5 комментариев
  • Проблема с MySql,поможете?

    Комментировать
  • Что делают делегаты в C#?

    @dmitryKovalskiy
    программист средней руки
    В данном коде внутрь метода ForEach передается делегат, который вызывается для каждого элемента списка intList. По коду он прибавляет к переменной result все элементы списка. Для конкретной задачи есть десяток решений проще и надежнее, а данный выглядит как говно. Да, делегаты используют для передачи в качестве параметра метода - ссылки на метод, удовлетворяющей сигнатуре делегата.
    Ответ написан
    Комментировать
  • Как передать массив без изменений вне текущего класса?

    @dmitryKovalskiy
    программист средней руки
    Клонировать объект. А заодно разобраться по шагам как у вас ссылки на объекты проставляются. "Оно само, я не трогал" не бывает.
    Как вариант - переделать matrix в структуру если это возможно и не создаст других багов.
    Ответ написан
    Комментировать
  • System.NullReferenceException C# WebApi?

    NYMEZIDE
    @NYMEZIDE
    резюме - ivanfilatov.ru
    1. public class IParam - по названию это интерфейс. Переименуйте, иначе будете и сами путаться и других.

    2.
    // POST api/<controller>
    // PUT api/<controller>/5
    // DELETE api/<controller>/5

    где так учат???
    делайте правильно:
    [HttpGet, Route("~/api/Products")
    public IList<IParam> GetAll()
    {
    }
    [HttpGet, Route("~/api/Products/{id}")
    public IParam Get(int id)
    {
    }
    [HttpPost, Route("~/api/Products")]
    public void Post(string value)
    {
    }
    [HttpPut, Route("~/api/Products/{id}")]
    public void Put(int id, string value)
    {
    }
    [HttpDelete, Route("~/api/Products/{id}")]
    public void Delete(int id)
    {
    }


    3. "Приложение постоянно должно снимать показатели, а не ждать обращений по WebAPI"
    а тогда зачем вам WebApi скрещивать ? пусть будет консольное приложение или слежба, которая в лог/БД пишет ваши показатели.
    и будет отдельный WebAPI сайт на ISS который может отдавать эти данные из лога/БД.
    Ответ написан
    Комментировать