Ответы пользователя по тегу C#
  • Множество сущностей, связанных с одной таблицей. Хорошо ли это?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1.
    >> Все эти медиа хранятся в одной таблице и различаются по полю Type
    Вводя тип, различающий данные в таблице вы задаете условную логику. А это усложнение кода!

    2.
    Одна таблица одна сущность! Не экономьте на таблицах, если на это нет веских причин по performance.

    3.
    Есть объектно-ориентированные БД, которые позволяют вытащить общие части в аналог "базового класса". Посмотрите в эту сторону.

    Это IMHO. Основано на том, как бы мне проще было понимать как все устроено.
    Ответ написан
    Комментировать
  • C# или C++ для знающего C#?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вам всего 15 лет! Чего паритесь то? Детей кормить надо? Жену одевать, содержать надо? На квартиру зарабатывать надо?

    Нет же ! У вас времени дофига! Пробуйте как можно больше. Ищите себя. Если вас к чему-то тянет, то и не стоит себя отговаривать. Вот когда будет 25, тогда и начните фокусироваться в строго очерченном направлении, а до тех пор пробуйте и эксперементируйте!
    Ответ написан
    1 комментарий
  • Как правильно писать тесты?

    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 комментариев
  • Возможно ли в C++ повторное выделение памяти в стеке под переменную?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вы наверное хотите получить такое:
    #include <iostream>
    using namespace std;
    
    struct Example{
    	int a;
    };
    
    int main() {
    	Example example{5};
    	cout << example.a << endl;
    	example = Example{101};
    	cout << example.a << endl;
    	return 0;
    }


    Другими словами у каждого user-defined типа есть конструкторы, деструкторы и операторы присвавания по-умолчанию.
    Ответ написан
    Комментировать
  • Как протестировать добавление элемента в список C#?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вы не можете начать тестировать только потому, что Вы решили сначала написать код, а только потом его тестировать. Это неверно! Когда принимается решение писать код, нужно хотя бы где-то описать его задачу. TDD почти один в один взяли подход от математиков. У математиков тоже есть "Дано" - это аналог SetUp и "Нужно сделать" - это аналог вашего тестируемого кода, т.е. то что Вы реализуете и "Чтобы удовлетворяло условиям...." - Это очень похоже на Assert.

    Откиньте Ваш код, как будто Вы его еще не написали. Прочитайте формулировки нескольких мат.задач. Посмотрите их стилистику. Как они оформляют мысли при изложении сути задачи. И попробуйте следовать точно также! То есть опишите вашу программерскую задачу до начала решения, как это делают математики.

    /Offtop:
    Рекомендую Вам выписать возможные случаи при добавлении элемента в список. К примеру:

    Позитивные случаи:
    * Добавить нормальный элемент;
    и т.д. и т.п.

    Негативные:
    * Добавить Null;
    * Добавить когда список уже переполнен - а такое возможно?;
    * Добавить когда список, когда не доконца создан - а такое возможно?
    и т.д. и т.п.
    Ответ написан
    Комментировать
  • Должен ли .dll показывать версию, имя и тд в свойствах файла?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Имею опыт работы антивирусным экспертом в одной из компании нашей необъятной Родины. Скажу, что ДА, нужно!
    Ответ написан
    Комментировать
  • Как протестировать большой объект не создавая его в каждом тестовом методе?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Вот две из основных характеристик модульного теста "Скорость выполнение", вторая "Простота написания". Если эти два качества сложность достич, то Вы пишите тест другого типа, не модульный! Возможно интеграционный.

    С Файлом в тестах имеет смысл работать только и только тогда, когда Вы тестируете класс по работе с файлом. К примеру тест для std::fstream из C++ стандартной библиотеки или FileInputStream из java библиотеки. НО! За качество стандартных библиотек разработчики не несут ответственности.

    Другими словами Вам надо избавиться от факта использования файла в ваших тестах! Возможно Вашему классу нужно работать с интерфейсом стрима и свести работу с файлом через файловый стрим, в production коде и через Memory стрим, если это тестовый.

    Чтобы избежать создания объекта класса в каждом тесте, надеюсь Вы хотите убрать дублирующие строчки, то Вы можете вынести создание объекта в setUp() подобный метод или вынести создание в Factory-класс и тогда использование фабрики будет занимать одну строчку в тесте, что значительно лучше!
    Ответ написан
  • В чем отличия C++ и C# ?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    1) Это две разные вселенные. Но при этом можно переключать мозги на разработку в один промежуток времени на С++, а после чашки чая на C#. Если нужно быстро решить проблему и при этом не парится с эффективностью выполнения программы, то C#, иначе при написании системного кода который оооочень много работает на уровне байтов, word,dword то это С++.
    2) То что у них общий дедушка еще не значит что они похожи. Отличий много! Причем действительно много. Используются разные идиомы, трюки, подходы. К примеру C++ идиому traits попробуй повтори на C#. А иногда она очень выручает!!!
    Ответ написан
    Комментировать
  • Какой язык с семейства Си учить ?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Учите английский. Чем лучше читаете, пишите, думаете на нем тем лучше в освоении чего-либо связанного с компами. На мой взгляд лучше потратить время на улучшение навыков английского чем изучение еще одного языка программирования.
    Ответ написан
    Комментировать
  • Как познать C++?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    На мой взгляд автору надо найти в круге своих знакомых того кто очень хорошо программирует на С++. Как правило если этот гуру умеет хорошо и лаконично высказать свою мысль, то и посоветовать может то что действительно имеет ценность! Ведь не даром же говорят: «Самый лучший дистрибутив Linux тот, который стоит у вашего ближайшего знакомого шарящего в нем».
    Среди бывших и текущих коллег у меня есть довольно серьезные знатоки С++, читая код которых уже учишься многому без каких-либо книг. А если при этом и вопрос спрашиваешь, то получаешь достаточно серьезное и обоснованное мнение.

    Магия: Чтение кода написанный хорошим программером + общение + непрерывная практика.
    Ответ написан
    Комментировать