Обновить
119.05

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Период
Уровень сложности

Как тестировать не-публичные методы в .NET

Время на прочтение3 мин
Количество просмотров32K
image Любишь покрывать код тестами? Тебе нравится приятное теплое чувство защищенности, которое возникает при прохождении тестов?

Молодец!

Настоящие профессионалы не полагаются на случай, они стелют соломку заранее держат все под контролем.

Хочешь чтобы внутри, за публичным интерфейсом, тоже все было покрыто тестами?

Пойдем, я расскажу, как это сделать

Singleton serialization или сад камней

Время на прочтение6 мин
Количество просмотров19K
image

В процессе разработки захотелось сериализовать синглтон, но с сохранением и восстановлением значений его полей. На первый взгляд нетрудный процесс обернулся увлекательным путешествием в сад камней и булыжников: от получения двух синглтонов до отсутствия сериализации полей.
Читать дальше →

Руководство разработчика Prism — часть 6, продвинутые сценарии MVVM

Время на прочтение36 мин
Количество просмотров19K
Оглавление
  1. Введение
  2. Инициализация приложений Prism
  3. Управление зависимостями между компонентами
  4. Разработка модульных приложений
  5. Реализация паттерна MVVM
  6. Продвинутые сценарии MVVM
  7. Создание пользовательского интерфейса
    1. Рекомендации по разработке пользовательского интерфейса
  8. Навигация
    1. Навигация на основе представлений (View-Based Navigation)
  9. Взаимодействие между слабо связанными компонентами

В предыдущей главе было описано, как создать основные элементы паттерна MVVM, разделив интерфейс пользователя, логику представления и бизнес-логику по отдельным классам (представление, модель представления и модель), реализовать между ними взаимодействие (посредством привязки данных, команд и интерфейсов валидации данных), организовать их создание и настройку.

Реализация паттерна MVVM, используя эти основные элементы, скорее всего, подойдёт под большинство сценариев в вашем приложении. Однако можно встретиться с более сложными сценариями, которые требуют расширения паттерна MVVM, или применения более продвинутых методов. Это, скорее всего, произойдёт, если ваше приложение будет большим или сложным, но с этим можно встретиться и во многих небольших приложениях. Библиотека Prism предоставляет компоненты, которые реализуют многие из этих методов, позволяя вам легко использовать их в ваших приложениях.

Эта глава описывает некоторые сложные сценарии и то, как их поддерживает паттерн MVVM. Следующий раздел показывает, как команды могут быть объединены в цепочки или связаны с дочерними представлениями, а также как они могут быть расширены для поддержки пользовательских требований. Следующие разделы описывают, как обрабатывать асинхронные запросы данных и последующее взаимодействие с пользовательским интерфейсом, а также как обработать запросы взаимодействия между представлением и моделью представления.

Раздел «Продвинутое создание и настройка», даёт представление о том, как создавать и настраивать компоненты при использовании контейнера внедрения зависимости, такого как Unity Application Block (Unity), или Managed Extensibility Framework (MEF). Заключительный раздел описывает, как можно протестировать приложения MVVM, и даёт представление о модульном тестировании классов модели и модели представления, а также о тестировании поведений.
Читать дальше →

Композиция vs наследование

Время на прочтение3 мин
Количество просмотров86K
Как и всем разработчикам, мне часто приходилось читать и слышать утверждение, что «композиция всегда лучше наследования». Наверное, даже слишком часто. Однако я не склонен принимать что-либо на веру, поэтому давайте разберёмся, так ли это.
Читать дальше →

Экономическая стратегия «Сахалинская колония»

Время на прочтение5 мин
Количество просмотров25K
Сахалинская колония — экономическая стратегия, цель которой, выжить. Игроку дается типовое, либо случайно сгенерированое игровое поле, поделенное на ячейки.
Каждая ячейка представляет собой определенный ресурс, либо чистое поле. В начале игры игроку дается здание администрации и 2 участка земли, на которых он может строить ресурсодобывающие строения. Все строения со временем разрушаются и требуют ремонта — за деньги вырученные от продажи ресурсов. Здание администрации является основным — невозможность его ремонта приводит к окончанию игры.
Выйти в плюс по доходам непросто, и редкий, но дорогой ремонт администрации часто ломает красиво выстроенные планы.



Краткая информация о разработке, ссылки

Жеребьевка — нажатием кнопки

Время на прочтение2 мин
Количество просмотров21K
Для решения одной, как я считаю, амбициозной задачи, связанной с проведением футбольного турнира, мне необходимо было использовать процедуру формирования соревновательных пар, т.е. провести жеребьевку. Но произвести ее нужно не обычным «человеческим» способом, а автоматизировано. Поискав готовые решения аналогичной задачи, нашел только формирование корзин участников при наличии сеянных и несеянных команд (Пример), что меня не устроило и не решало поставленной задачи. В итоге проанализировав процедуру обычной однокруговой жеребьевки, сформировал следующий алгоритм и условия:
Входные условия жеребьевки:
  1. Имеется N команд – участников.
  2. Каждая команда за первый круг сыграет N-1 матчей.
  3. Команда N ни в каком из туров не может сыграть сама с собой.
  4. В каждом туре соперники образуют уникальные, не повторяющиеся ранее пары.
  5. Если в каком-то из туров команда N играет с командой M, то соответственно в этом же туре команда M играет с командой N.

Сопоставив процесс формирования случайных пар соперников процедуре заполнения двумерного массива DrawTable[i, j] случайными величинами, получил следующее (язык C#, .Net 4.0):
Читать дальше →

Получение метаданных .NET на клиенте с использованием ajax

Время на прочтение3 мин
Количество просмотров4.8K
Всем, кто программирует в среде ASP.NET MVC, хорошо известно, насколько широко используются метаданные в .NET вообще и в MVC в частности. В MVC, атрибуты применяются как при генерации разметки, так и при валидации данных, полученных с клиента.
При использовании классической модели программирования сайтов это прекрасно работает. Но что, если Вы работаете с использование ajax и формируете html разметку динамически на клиенте? Вы хотите иметь метаданные модели (далее МДМ) на клиенте? Я — да!
Читать дальше →

Использование Dynamic Data совместно с Entity Framework 5

Время на прочтение5 мин
Количество просмотров8.7K


Добрый день!

Как известно, уже вышла релиз-версия .NET Framework 4.5, а также стала доступна для загрузки финальная версия Visual Studio 2012.

Познакомиться с новой Visual Studio я успел еще с beta версии, а после релиза начал использовать rtm релиз Visual Studio и .NET Framework 4.5 в реальной работе.
В новую версию .NET Framework входит так же новая версия Entity Framework. Уже пятая. Точнее она туда не совсем входит — у меня при создании проекта файлы подгружаются из репозитория NuGet. Но в любом случае в новом проекте используется именно 5 версия библиотеки.

Прежде чем продолжить, хочу вкратце рассказать, что же нового появилось в EF5 и почему я решил начать использовать эту версию.
Читать дальше →

Автоматическое тестирование ASP.NET приложения через CUITe — особенности

Время на прочтение4 мин
Количество просмотров3.1K

Сразу оговорюсь — я не являюсь профессиональным инженером по автоматизации тестирования. Однако, поскольку на данный момент так вышло, что это мое основное занятие по работе — буду особенно рад комментариям от людей со специализацией в этой области.

В статье — краткое описание CUITe для тех, кто не сталкивался, использование этого фреймворка для тестирования приложения с фронт-эндом на ASP.NET и проблемы, с которыми столкнулись.

Что есть CUITe


Как говорит описание проекта на codeplex, это тонкая надстройка над UI Testing фреймворком от Microsoft. В описании приведено много преимуществ, но для меня они сводятся к двум: вместо UIMap — Object repository (более красиво, определения (definitions) UI объектов отдельно от остального кода), и разнообразный синтаксический сахар (все наглядно — берем control в UI объекте и вызываем его метод).
Инсталляция банальна — запускаем инсталлер, Next->Next->Finish, подключаем к проекту CUITe.dll — все. Элементы для интеракции находятся с помощью фирменного CUITe Object Recorder™ или вручную (я предпочитаю последнее). Основы записи тут приводить не буду — статья не об этом, по основам информации много, чего не скажешь о проблемах, описанных ниже (будет интерес — напишу отдельный пост по основам).

Итак, не все так радужно.

Читать дальше →

Отправляем письма из ASP .NET MVC

Время на прочтение3 мин
Количество просмотров27K
Часто в приложениях возникает необходимость отправлять письма пользователям. Сегодня я покажу как с помощью ActionMailer .Net эта задача легко решается. Основной его плюс в представлении отправляемых писем в виде действий контроллера, само тело письма представлено отображением, а также то, что в режиме отладки он позволяет сохранять письма напрямую на жесткий диск, без использования почтового сервера.
Читать дальше →

Postsharp. Решаем задачу кэширования

Время на прочтение6 мин
Количество просмотров2.9K
Иногда попадаются такие ситуации, в которых нет никакой возможности ускорить работу некоторой операции. Она может зависеть от какого-то сервиса, который располагается на внешнем web сервере, или это может быть операция, которая дает высокую нагрузку на процессор. Или же это могут быть быстрые операции, однако, их параллельная работа может высосать из вашего компьютера все ресурсы производительности. Существует огромное количество причин чтобы использовать кэширование. Следует отметить, что PostSharp, изначально не предоставляет решений для вас какого-либо фреймворка кэширования, просто он позволяет сделать эту задачу на порядки быстрее, без каких-либо занудных действий, типа расстановки кода, отвечающего за кэширование по всему исходному тексту программы. Он позволяет решить эту задачу элегантно, вынося задачи в классы и позволяя их повторно использовать.
Читать дальше →

Адаптированный паттерн Command с использованием Dependency Injection

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров5.2K

Паттерн Command — широко известный и мощный инструмент построения гибких систем, позволяющий целиком вынести логику каждого метода в отдельный класс.

В статье показано как совмещение Command с Dependency Injection (DI) даёт дополнительные преимущества в архитектуре приложений.

Статья будет полезна разработчикам всех уровней, а также архитекторам приложений.

Читать далее

Aspid.MVVM — производительный MVVM фреймворк для Unity

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1K

Aspid.MVVM — это высокопроизводительный фреймворк MVVM для Unity, построенный на Source Generator и разработанный с акцентом на простоту, масштабируемость и четкое разделение бизнес-логики и представления.

Читать далее

Ближайшие события

Копаемся в открытом исходном коде Unity VR игр. Часть 2: NorthStar

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров821

Это вторая статья из небольшого цикла, посвящённого знакомству с некоторыми любопытными VR-играми, а заодно и с примерами проблем в их исходном коде, найденных с помощью PVS-Studio. Знакомьтесь, NorthStar!

Читать далее

SOLID для начинающих Unity-разработчиков: простыми словами и с примерами из жизни

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.2K

SOLID для начинающих Unity-разработчиков.
Разбираю 5 принципов программирования через аналогии из жизни.
Каждый принцип - с примерами кода на C#.

Читать далее

Кастомизируем xUnit: feature-toggles или API тесты не для всех (конечных точек)

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров1.1K

У вас в проекте появились feature‑toggles, а API тесты никто не отменял?

В статье рассматривается практический пример кастомизации тестового фреймворка xUnit для написания API тестов с учётом feature‑toggles в условиях их конфликтующих состояний.

Материал может представлять интерес для инженеров, связанных с разработкой и тестированием серверной части программного обеспечения.

Читать далее

Используем API Speech2Text для распознавания записей разговоров

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2K

В нашей компании анализируются звонки менеджеров отдела продаж для оценки их эффективности, устранения недочётов и улучшения сервиса. На сегодняшний день это составляет немалый массив ручной работы, для облегчения которой мы задумали привлечь технологии искусственного интеллекта. Идея следующая: забираем записи звонков, распознаём речь (преобразовываем в текст), подключаем LLM для анализа текста, знакомимся с выводами, при необходимости (например, возникновении каких-то аномалий) контролируем происходящее вручную.

Распознавание аудио решили делать через сервис Speech2Text, пример использования API которого я и покажу в этой статье. В черновом варианте получаем примерно следующую схему работы (нас сейчас интересует прямоугольник с подписью Speech2Text connector):

Читать далее

Руководство для Unity-разработчика: Модульное тестирование

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров2.4K

Давайте будем честны: как Unity-разработчики, мы все пишем код, который может содержать ошибки. Это касается и меня, и вас, и даже искусственного интеллекта.

Многие разработчики программного обеспечения считают модульное (или unit) тестирование важнейшим инструментом для раннего выявления и предотвращения регрессий. Но действительно ли оно эффективно в контексте разработки Unity-проектов?

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

Читать далее

Добавление слов в языковую модель Vosk

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2.4K

Краткий гайд, как дополнить vosk модель распознавания речи своими словами. Для дальнейшего использования в своих проектах. Все подводные камни в использовании инструмента kaldi в 2025 году.

Принять испытание

JSON в Unity за 10 минут

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров5.1K

JSON - это популярный текстовый формат, который используется для обмена данными. Он был разработан на основе JavaScript синтаксиса, но является полностью независимым от языка, что позволяет использовать его почти в любом программном окружении.

В контексте игродела JSON нередко используют для внутриигровых сохранений. Фактически мы преобразовываем экземпляры наших классов и структур в удобный формат, а далее помещаем это в файл с расширением .json

Читать далее

Вклад авторов