Command Manager

Сегодня я хочу рассказать про шаблон Команда и Менеджер команд. Все к этому плавно и шло. В прошлой статье это так и напрашивалось, но мне было лень это туда вкручивать, решил рассказать отдельно. Хотя сначала у меня были сомнения в том, как это рассказывать и нужно ли вообще. Потому что я с ходу накидал 5 способов реализации (по мере усложнения и развития идеи, но потом один все же забраковал) и этот функционал в еще большей степени развит и встроен в WPF. В итоге я думаю это будет полезно новичкам, чтобы было лучше понятно как это использовать в дальнейшем, в WPF, да и вообще.

Начнем с официальной части, вот что говорит нам википедия по поводу назначения этого шаблона:

Команда — шаблон проектирования, используемый при объектно-ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры. Обеспечивает обработку команды в виде объекта, что позволяет сохранять её, передавать в качестве параметра методам, а также возвращать её в виде результата, как и любой другой объект.

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

Подробнее

Interprocess Communications

Давно было интересно, как делается так, чтобы был запущен только один экземпляр программы. Т.е. я знал в теории примерно с помощью чего это делается, но попробовать это в деле руки так и не доходили. Еще очень интересно было как так делается, что я открываю скажем таблицу Excel и она открывается не в еще одном приложении, а в том что уже открыто. Это конечно выбешивает порой, но все равно технология интересна.

Шуршание в интернете подвело к тому, что это называется Interprocess Communication (IPC) и существует множество способов как это осуществить, в зависимости от конечной цели, то ли вам надо только один экземпляр программы, то ли как в Экселе, то ли еще чего. Дальнейшее изучение вопроса и родило эту статью.

Подробнее

Register file extension

Для одного из проектов понадобилось мне создать ассоциацию между файлами и программой. Не важно сейчас, это новое какое-нибудь расширение в духе .myextension или же вы хотите переопределить открывание .mp3 на свою программу. Понятное дело, что вы не хотите озадачивать пользователя запуском непонятно чего или там отрыть файло специфическим образом, или запускать reg файл. Все надо сделать программно, по желанию пользователя, или же предложить ему переназначить открывать файлы по умолчанию с помощью вашей программы.

Итак, цель – программно зарегистрировать любое расширение на вашу программу.

Подробнее

Dll Within

Идея

Достаточно давно я сделал программу которая использовала 2 сторонних библиотеки. Получается, что на выходе у меня было как минимум 3 файла, но я хочу один файл! На тот момент я не особенно озаботился тем, как это сделать и так и осталось там 3 файла.

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

Итак, будем делать так, чтобы можно было внедрить в один файл, любые библиотеки, как свои так и третьих сторон.

Подробнее

Visual Studio Multi-Project Templates

Идея

В одной из прошлых статей я рассказывал уже о том, как создавать шаблоны проектов. Там я рассказывал о нюансах создания шаблонов в VS2008 и VS2010, как настроить данные, файлы и все такое прочее. Это конечно хорошо, но всегда хочется большего.

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

Итак, будем делать мульти-проектовое (проектное?) решение.

Подробнее

ObjBin Cleaner Service

Давно хотел сдеалать программку, которая бы на регулярной основе проверяла папку с проектами и удаляла оттуда автогенеренные папки типа obj и bin, дополнительно все, что нагенерит там ReSharper и папки TestResults. Для кого-то это может и не проблема, но при наличии в разработке нескольких достаточно крупных проектов это становится проблемой, все это может занимать до 2 гигов, к примеру, как у меня. Можете себе еще представить ситуацию, когда на одной машине работает несколько человек, у каждого своя папка с проектами и после завершения сеанса работы не происходит очистки этих папок. Как-то раз, чистя такие вот станции мы обнаружили, что в таких папках было 60 гигов! Таким образом полезность утилиты, которая бы все это каждодневно удаляла – очевидна.

Для этой цели я задумал использовать Windows Service. Некоторые говорят, что легче написать батничек, но я этой магией не владею и ковыряться не хотелось, Windows Service мне показалось более заманчивой перспективой в плане получения новых знаний.

Подробнее

Season II

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

Постоянно писать какие-то большие и мощные статьи на регулярной основе тяжело, потому что нужно время на исследования, создание чего-то полезного с исследуемой технологией, оформление это в виде статьи, создание картинок. А кроме этого ведь еще есть куча друзей, девушка, работы — на все нужно время.

Но я буду стараться ))