Какова стратегия разработки White-Label приложения для Windows Phone?
Есть задача разработать приложения для Windows Phone, которые будут в пределах погрешности одинаковы по логике, но могут иметь разное визуальное оформление. Думаю, как построить приложение, чтобы при одинаковой кодовой базе обеспечить разные "шкурки".
Отличия шкурок будут заключаться в первую очередь в разных цветах элементов, разных картинках и разных текстах, но было бы неплохо предусмотреть возможность варьировать расположение элементов.
Общее решение вижу в виде связки Class Library, в которой будет размещаться логика, и собственно приложения с кастомизацией.
Вижу следующие варианты:
1. Размещение в Class Library ViewModel-ей, а в приложении - XAML и минимальный code-behind
Что смущает в варианте:
а) то, что XAML-разметка будет плодиться в приложениях, по большей части при помощи copy-paste.
б) наличие минимального code-behind (которого может оказаться немало), который тоже будет копипастится
2. Создание базового класса для страниц в Class Library
По сути вариант 1, но позволяет избавится от Code-Behind в приложении. Из минусов - обращаться к контролам из базового класса (естественно, предполагая, что они есть в разметке) нужно будет поиском, что снижает прозрачность кода
3. Использование стилизации
В этом случае базовая разметка XAML будет находится в Class Library, а в приложении - только ресурсы, описывающие внешний вид страниц и контролов (Control Templates).
Вариант выглядит заманчиво, но я не нашёл способа в приложении перекрыть стили, применённые к страницам в подключаемой Class Library. Кроме того, вариант даёт меньшую гибкость в вариациях кастомизаций.
Понимаю, что вопрос неоднозначный, и плюсы одних вариантов являются минусами других, но всё же хотел бы услышать мнение специалистов. Может кто с таким сталкивался. Или кто может предложить другой вариант?
Вынесите все стили, которые нужно подменять, в ResourceDictionary.
Далее вы можете иметь один проект, в котором будет весь ваш код. Когда нужно сделать очередное приложение, замените проектные файлы (.csproj, манифест, StoreAssociation, StoreKey) и файл ResourceDictionary. Таким образом для нового приложение вам понадобиться сделать только проектные файлы и словарь с новыми стилями.
Если таких приложений у вас много, можно сделать простую билд-систему, которая будет на основе конфига сама генерировать проектные файлы и собирать приложения с помощью компилятора (без VisualStudio)
Решение интересное, спасибо! Правда оно совсем не предполагает кастомизаций в функционале. Потрясу бизнес на предмет этого, и если их не будет, то скорее всего возьму на вооружение.
Вы говорили о кастомизациях в UI. В этом варианте этого волне легко добиться, главное понять, что конкретно должно меняться и вынести это в словарь ресурсов. Таким способом вы можете даже полностью изменить UI приложение, так что каждый вариант не будет поход на предыдущий.