CQRS — довольно хорошо изученный паттерн. Часто можно слышать, что вы либо следуете CQRS, либо нет, имея ввиду что это что-то вроде бинарного выбора. В этой статье я бы хотел показать, что существует спектр вариаций этого понятия, а также как разные типы CQRS могут выглядеть на практике.
Вадим Кирсанов @dSnixread-only
Разработчик
Знай сложности алгоритмов
2 мин
999KПеревод
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
+280
Functional C#: работа с ошибками
6 мин
29KВ этой части мы рассмотрим как иметь дело со сбоями и ошибками ввода в функциональном стиле.
- Functional C#: Immutability
- Functional C#: Primitive obsession
- Functional C#: Non-nullable reference types
- Functional C#: работа с ошибками
+14
50+ лучших дополнений к Bootstrap
5 мин
202K![](https://habrastorage.org/files/b0e/df7/aea/b0edf7aea47449d8b80fd71f52380abc.png)
Благодаря популярности CSS фреймворка Bootstrap, для него разработали массу различных дополнений. Даже сейчас вы можете использовать Bootstrap практически для любой задачи при разработке и оформлении вебсайта.
Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
+99
Сахарные инжекции в C#
5 мин
42KТуториал
C# — продуманный и развитый язык программирования, в котором предусмотрено немало синтаксического сахара, упрощающего написание рутинного кода. Но всё-таки существует ряд сценариев, где нужно проявить некоторую смекалку и изобретательность, чтобы сохранить стройность и красоту.
В статье мы рассмотрим некоторые такие случаи, как широкоизвестные, так и не очень.
![](https://habrastorage.org/files/b24/129/b82/b24129b82a9e42fba40fddb01381c2dc.png)
В статье мы рассмотрим некоторые такие случаи, как широкоизвестные, так и не очень.
![](https://habrastorage.org/files/b24/129/b82/b24129b82a9e42fba40fddb01381c2dc.png)
+22
Приемы разработки ASMX веб-сервисов
99 мин
120K![](https://habrastorage.org/files/295/2c2/714/2952c2714f3e49a5be5d2d05452f938e.jpg)
+16
Список YouTube-каналов для обучения веб-разработке
2 мин
217K![image](https://habrastorage.org/getpro/habr/post_images/a44/da4/e29/a44da4e294b84541f72eb2aeeb50c6d8.jpg)
Привет, хабражители!
Представляю вам список YouTube-каналов для обучения веб-разработке. Список доступен на гитхабе, там он будет пополняться и редактироваться. В планах — создание отдельной странички для фильтрации каналов по тегам и рубрикам.
Также хочу попросить вас о небольшой услуге: если вы знаете канал, не вошедший в список — опубликуйте ссылку на него в комментариях или отправьте pull request. Сообщество будет благодарно вам.
Под катом — текущая версия списка.
+54
Действительно прозрачное использование WCF
12 мин
49KМотивация
Для desktop-мира wcf остаётся самым распространенным способом организации клиент-серверного взаимодействия в .net как для локальных, так и для глобальных сетей. Он гибок в настройке, прост в использовании и прозрачен.
По крайней мере, так должно быть. На практике добавление нового сервиса — это рутина. Нужно не забыть прописать конфигурацию на сервере, сделать то же самое на клиенте, нужно написать или сгенерировать proxy-класс. Поддерживать конфиги неудобно. Если сервис изменился, то нужно вносить изменения в proxy-класс. А ещё не забыть про регистрации в IoC-контейнере. И добавление новых хостов для новых сервисов. И еще хочется простой асинхронности. По отдельности всё просто, но даже для статьи я дописывал этот список уже трижды, и не уверен, что не упустил чего-нибудь.
Время автоматизировать. Простейший сценарий от создания решения до вызова wcf-сервиса выглядит так:
- Install-Package Rikrop.Core.Wcf.Unity
- Пишем ServiceContract и их реализации
- На сервере и клиенте добавляем одну строку регистрации в IoC (конфиги править не надо)
- Поднимаем хосты с двух строк
var assembly = Assembly.GetExecutingAssembly(); _serviceHostManager.StartServices(assembly);
- На клиенте резолвим IServiceExecutor<TService>. Эта обёртка служит для вызова методов сервиса и скрывает работу с каналом.
- Можно пользоваться
var articles = await _myServiceExecutor.Execute(service => service.GetArticles());
+14
Упаковка, компрессия и защита сборок
7 мин
11Kпоследняя редакция статьи доступна на сайте makeloft.xyz
Материалы этой статьи описывают механизмы компоновки, компрессии, динамической загрузки, а также пути элементарной защиты .NET-сборок стандартными средствами среды разработки Visual Studio. Однако, возможно, нижесказанное будет в некоторой степени справедливо и для других программных платформ.
Для подобных целей создано немало утилит, в том числе платных, но зачастую работают они как чёрные ящики и разработчик лишь в малой степени способен контролировать процесс. Иногда, после компоновки, приложения и вовсе отказываются запускаться, а причину выявить довольно сложно.
Но, обладая определёнными знаниями, можно выполнить весь процесс самостоятельно с полным контролем на каждом шаге и возможностью отладки уже упакованных сборок…
![image](https://habrastorage.org/getpro/habr/post_images/3a6/198/81d/3a619881df4fd5827e53758739dba2da.jpg)
Материалы этой статьи описывают механизмы компоновки, компрессии, динамической загрузки, а также пути элементарной защиты .NET-сборок стандартными средствами среды разработки Visual Studio. Однако, возможно, нижесказанное будет в некоторой степени справедливо и для других программных платформ.
Для подобных целей создано немало утилит, в том числе платных, но зачастую работают они как чёрные ящики и разработчик лишь в малой степени способен контролировать процесс. Иногда, после компоновки, приложения и вовсе отказываются запускаться, а причину выявить довольно сложно.
Но, обладая определёнными знаниями, можно выполнить весь процесс самостоятельно с полным контролем на каждом шаге и возможностью отладки уже упакованных сборок…
![image](https://habrastorage.org/getpro/habr/post_images/3a6/198/81d/3a619881df4fd5827e53758739dba2da.jpg)
+9
58 признаков хорошего интерфейса
16 мин
380KПеревод
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.
Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.
![image](https://habrastorage.org/getpro/habr/post_images/eb2/37f/b11/eb237fb11e9cf07baae998e6a08f5176.png)
1 Один столбец вместо нескольких
Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.
![image](https://habrastorage.org/getpro/habr/post_images/eb2/37f/b11/eb237fb11e9cf07baae998e6a08f5176.png)
+138
Интересное по хабу .Net за 2014 год
2 мин
26K![](https://habrastorage.org/files/920/2aa/0eb/9202aa0eb04f4e3694785d11354315a0.png)
Новости хаба .Net на Хабре занимают 33 страницы или 328 постов. Что говорит о том что новости появляются почти каждый день =) Посмотрим на самое интересное из них (на мой скромный взгляд). Ну и загляните под кат: до ката, конечно же, не все.
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
![](https://habrastorage.org/files/7d1/9d7/8ab/7d19d78ab896445fb5573b5f5e807ba0.png)
+21
Подготовка к сертификационному экзамену Microsoft 70-483 «Programming in C#»
13 мин
103K![](https://habrastorage.org/files/bcc/ee1/be9/bccee1be9a264ab4967e4703fab6f749.jpg)
Во время подготовки к экзамену номер 70-483 нашел множество разрозненных сайтов с различными ссылками на мануалы, которые мне немного помогли. Но, что помогло мне больше, так это то, что я составил для себя памятку на нескольких страницах, выдержками из которой и хочу поделиться.
Целью не является подробное описание C#, целью является освежить в памяти и заострить внимание на некоторых необходимых темах. Если какие-то темы вам незнакомы, то это значит, что у вас есть пробелы, которые необходимо устранить.
Раскрывать вопросы тестирования я не могу (да и не помню я уже их), но, если многие из перечисленных ниже нюансов, трюков и тонкостей, помогут вам, то вы на меня не обижайтесь (написано с иронией).
+28
Инфраструктура команд для вызова пользователем действий в шаблоне MVVM
10 мин
10KПредставим типичный пользовательский интерфейс. Есть несколько элементов управления, которые запускают некоторые повторяемые (за время жизни приложения) действия разной сложности. Чтобы сложные действия, такие как обращение к различным носителям, обращение к сети или сложное вычисление, не снижали отзывчивость интерфейса, они должны быть асинхронными. Дополнительно могут быть элементы управления, отменяющие асинхронно запущенное действие. Действие имеет свойство состояния (неактивно, запущено, завершено успешно, завершено с ошибкой, отменено), которое тем или иным образом отображается пользователю. Принятый в WPF, Silverlight и WinPhone шаблон проектирования MVVM диктует, чтобы такое «действие» было частью модели представления, давая возможность вызывать сервисы модели из пользовательского интерфейса без создания между ними жёсткой связи. К сожалению, такое «действие» в базовой библиотеке классов не реализовано. Ближайшие имеющиеся в библиотеке сущности, такие как задачи System.Threading.Tasks.Task, команды System.Windows.Input.ICommand и делегаты System.Delegate, не подходят: задачи всегда одноразовые и не могут представлять повторяемое действие, делегаты и команды не поддерживают отмену и не содержат свойств состояния, а команды вообще не могут быть асинхронными. Далее я предлагаю решение в виде небольшой библиотеки классов, дающей возможность легко использовать описанные «действия» в ваших приложениях.
+12
Писать плагины с AppDomain — весело
12 мин
21KКак часто вы писали плагины для своих приложений?
В статье я хочу рассказать как можно написать плагины используя AppDomain, и кросс доменные операции. Плагины будем писать для уже существующего моего приложения TCPChat.
Кто хочет повелосипедить — вперед под кат.
В статье я хочу рассказать как можно написать плагины используя AppDomain, и кросс доменные операции. Плагины будем писать для уже существующего моего приложения TCPChat.
Кто хочет повелосипедить — вперед под кат.
+8
Информация
- В рейтинге
- Не участвует
- Откуда
- Сургут, Тюменская обл. и Ханты-Мансийский АО, Россия
- Зарегистрирован
- Активность