См. этот пример: https://jsfiddle.net/pqhdce2L/
function b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
var contentType = 'image/png';
var b64Data = Your Base64 encode;
var blob = b64toBlob(b64Data, contentType);
var blobUrl = URL.createObjectURL(blob);
var img = document.createElement('img');
img.src = blobUrl;
document.body.appendChild(img);
Я запустил бы с Руководства Составного приложения WPF (кашель ПРИЗМЫ кашля) от команды Microsoft P&P. С загрузкой прибывает большое эталонное приложение, которое является начальной точкой для большей части моей разработки WPF сегодня.
Команда DotNetRocks просто взяла интервью у Glenn Block и Brian Noyes об этом, если Вы интересуетесь слушанием больше от них.
Еще лучше Призма совсем не так тяжела, как CAB был, если Вы знакомы вообще с этим со дней WinForms.
Я сказал бы да, это могло легко быть структурировано к малым приложениям. Существует кривая обучения к началу работы, но честно, это помогло мне понять WPF лучше, чем попытка запуститься с нуля. После запуска проекта с CompositeWPF и затем запуском другого проекта без него, я пытался для дублирования функций CompositeWPF самостоятельно, потому что я пропустил те функции!:)
Прежде, чем спроектировать что-либо необходимо определить требования для приложения.
Это - распространенная ошибка разработчиков новичка - стартовое написание кода перед размышлением о том, как это работало бы. Мой совет будет состоять в том, чтобы попытаться описать некоторую функцию Вас приложение. Это поможет Вам чувствовать, как это должно быть реализовано.
Что касается полезных ресурсов изучения я настоятельно рекомендовал бы Вам для взгляда на CompositeWPF, который это - проект, специально разработанный для обучения лучших практик разработчиков разработки настольного приложения.
Ответ, "он зависит" как всегда.
Несколько вещей думать о: можно хотеть сделать это приложение толстого клиента веб-приложением (например), в какой-то момент. Если так, несомненно, необходимо будет сохранить разделение между бизнес-слоем (и ниже) и презентация. Самый простой способ сделать это должно быть уверено, что все вызовы к бизнес-логике проходят интерфейс некоторого вида. Более сложный путь состоит в том, чтобы реализовать полную установку MVC.
Другая вещь, которую можно рассмотреть, делает уровень доступа к данным независимым от бизнес-логики и пользовательского интерфейса. Этим я подразумеваю, что все вызовы от бизнес-логики в DAL должны быть универсальными, "получают меня, эти данные", а не "получают меня эти данные из SQL" или еще хуже "выполненный этот SQL-оператор". Таким образом можно заменить DAL тем, который получает доступ к другой базе данных, XML-файлам или даже чему-то неприглядному как плоские файлы.
Короче говоря, разделение проблем. Это позволяет Вам расти в будущем путем добавления другого UI, сегментации всех трех областей на их собственный уровень или изменения соответствующей технологии.
Я запустил бы с серии Build Your Own Cab Jeremy Miller.
Я был ранним приемным родителем CAB. Я узнал о много из рытья в ту технологию и чтения всех блогов.NET об архитектуре приложения.
Но недавно у меня был шанс запустить новый проект, и вместо того, чтобы использовать CAB, я пошел с StructureMap & NHibernate и одолжил некоторые шаблоны, которые Jeremy использует (в частности, его способ обработать агрегирование события). Результатом была действительно упрощенная, оснащенная рукой платформа, которая делает все, в чем я нуждаюсь, и я люблю работать с ним.
Относительно специфических особенностей Вашего вопроса: Я использую Репозиторий для доступа к данным. Я первоначально написал некоторый код ADO.NET и использовал средства чтения данных и отобразил мои объекты. Но это стало старым очень быстрый, таким образом, я захватил NHibernate и был действительно рад. Репозитории используют NHibernate для доступа к данным, и мои потребности доступа к данным довольно просты в этом конкретном приложении.
У меня есть уровень служб (выставленный через WCF, Дуплексные каналы), который использует репозитории. Мое приложение в основном клиент-сервер с реальным временем, обновляя (и я знаю, что Вашим вопросом были примерно клиенты, но я буду использовать те же технологии и шаблоны). O
n сторона клиента я использую MVP с StructureMap для МОК и некоторыми очень простыми стратегиями агрегирования события связи перекрестного класса. Я кодирую к интерфейсам для примерно всего. Единственная другая вещь, которую я сделал, была, одалживают у CAB идею гибкой "Рабочей области" для того, чтобы динамично отобразить представления. Я записал свой собственный интерфейс Workspace, хотя и реализовал мой собственный DeckWorkspace и TableWorkspace для использования в моем приложении (они были действительно простыми вещами записать).
Много моих решений в этом новом приложении было результатом опыта и боли, я чувствовал использование других платформ и инструментов. Я принял различные решения на этот раз. Возможно, единственный способ действительно понять, как спроектировать приложение, состоит в том, чтобы чувствовать боль выполнения его неправильно заранее.