Наша цель - чистый код, который работает.
четверг, 31 октября 2013 г.
воскресенье, 27 октября 2013 г.
Асинхронная загрузка данных с индикацией
Я как-то уже затрагивал тему асинхронной загрузки данных в своей статье TaskExtensions в помощь. Однако, используя такой подход, код со временем начинал обрастать огромным количеством callback'ов и командами. Чтобы оптимизировать данный процесс для своих нужд я сделал класс, которым и хочу поделиться. Ничего нового в нем нет, однако, он позволил сократить огромное количество кода и на мой взгляд является весьма интересным.
Суть класса такова: предоставить пользователю коллекцию динамических данных с выдачей уведомлений при обновлении, а также обеспечить механизм индикации загрузки данных, при этом выбор источника данных предоставить потребителю.
Самый классический сценарий для UI-девелопера: список объектов и кнопка "Обновить". Я решил совместить это в одной коллекции:
Самый классический сценарий для UI-девелопера: список объектов и кнопка "Обновить". Я решил совместить это в одной коллекции:
public sealed class AsyncObservableCollection<T> : ObservableCollection<T>, ICommand
{
private readonly Func<Object, Task<IEnumerable<T>>> factory;
public AsyncObservableCollection(Func<Object, Task<IEnumerable<T>>> factory)
{
this.factory = factory;
}
}
четверг, 26 сентября 2013 г.
Совершенный код
Если бы я прочитал эту книгу года 3-4 назад, мне бы она показалась гораздо интересней...
Автор очень подробно описывает организацию кода (занимает первую половину книги), поэтому для тех, у кого с этим проблемы - это просто кладезь знаний. Вторая часть книги, которая посвящена усовершенствованию кода и конструированию, для меня оказалась более интересной. Поражает такое количество источников, из которых автор черпал материал для своей книги. Во многих главах приводятся результаты различных исследований в области разработки ПО, и хотя некоторые из них устарели, они все равно очень интересны и порой удивляют.
четверг, 29 августа 2013 г.
Атлас Москвы
Приложение "Атлас Москвы" предоставляет легкий и удобный доступ к открытым данным портала правительства Москвы. Эти данные представляют интерес не только для самих государственных органов и не только для целей государственного управления, но и для граждан, бизнес-сообщества, научных, социальных, образовательных институтов, гражданских активистов.
четверг, 25 июля 2013 г.
Barley-Break Update!
Сегодня обновил дизайн своего первого приложения в Windows Store - Barley-Break. Вроде неплохо получилось! :)
Сохранение настроек приложения в изолированном хранилище
По поводу хранения настроек приложения написано уже очень много статей. Но о том, что сохранять свои данные можно так же в изолированном хранилище - очень мало упоминаний. Я не буду рассказывать о том, что это такое (об этом очень хорошо написано на MSDN), я просто хочу предложить некоторое решение, которое позволит вам хранить свои данные без особых усилий.
Что из себя представляют настройки приложения? Это коллекция пар ключ/значение. То есть это некоторый IDictionary<TKey, TValue>, где в качестве ключа выступает, как правило, строковый параметр, а в качестве значения, в идеале, может быть любой объект. Если внимательно посмотреть на пространство имен System.IO.IsolatedStorage, то можно обнаружить, что класс с таким функционалом уже есть - это IsolatedStorageSettings. Однако он доступен только для Silverlight и Silverlight for Windows Phone. А для настольных приложений доступен только класс IsolatedStorageFile, который представляет область изолированного хранения, содержащую файлы и папки. То есть разработчики настольных приложений здесь несколько обделены функционалом. Собственно этот пробел я и решил заполнить.
Идея до безобразия проста: ключ - это файл в изолированном хранилище, в котором хранится значение этого ключа в виде сериализованных двоичных данных. Однако, если ключ будет состоять из символов, которые не могут содержаться в имени файла (\/:*?"<>|), возникает проблема. Решение, в принципе, такое же простое - хранить значения оригинальных ключей в отдельном служебном файле и каждому такому значению сопоставлять уникальный идентификатор, по имени которого будет создаваться файл для хранения значения оригинального ключа. Если не совсем понятно, то надеюсь рисунок все прояснит:
Идея до безобразия проста: ключ - это файл в изолированном хранилище, в котором хранится значение этого ключа в виде сериализованных двоичных данных. Однако, если ключ будет состоять из символов, которые не могут содержаться в имени файла (\/:*?"<>|), возникает проблема. Решение, в принципе, такое же простое - хранить значения оригинальных ключей в отдельном служебном файле и каждому такому значению сопоставлять уникальный идентификатор, по имени которого будет создаваться файл для хранения значения оригинального ключа. Если не совсем понятно, то надеюсь рисунок все прояснит:
(info.dat - служебный файл, Key - оригинальный ключ, Guid - уникальный идентификатор)
понедельник, 1 июля 2013 г.
Мифический человеко-месяц
На днях закончил чтение книги Фредерика Брукса "Мифический человеко-месяц". Не смотря на то, что первое издание книги было выпущено в 1975 году, а второе (которое я собственно и читал) - в 1995 году и даже учитывая тот факт, что некоторые главы книги окончательно устарели, тем не менее этот бестселлер просто напичкан фразами, которые актуальны и по сей день. Конечно, эта книга уже давно разошлась на цитаты, но я позволил себе выписать те, которые понравились лично мне.
Подписаться на:
Сообщения (Atom)





