Я успешно реализовал шаблон MVC для моего уровня презентации, модель предметной области, уровень служб, репозиторий и общий - все они не зависят от платформы. Там, где мне нужно иметь специфичный для платформы код, такой как NetworkConnectionManager (мое имя), я использую #if #endif, чтобы обернуть объекты, или там, где мне нужно проводить модульное тестирование. Я использую консольное приложение для всех своих модульных тестов, оно точно такое же проект как проекты Android, iPhone и Windows Phone, за исключением того, что я пропускаю слой UI, который является специфическим для платформы пользовательского интерфейса. Я также помечаю свою консоль с помощью определения CONSOLE, а мои проекты Android с помощью ANDROID определяют, чтобы я мог выполнить #if # endif
Я должен сказать, что он отлично работает, если я могу поместить весь MVC-слой в модульный тест в консоли и заставить его работать под Android, то я уверен, что он будет работать под iPhone и Windows Phone, потому что консоль не даже есть интерфейс. Это идеальный способ проверить универсальность моего уровня презентации. Хотя этот подход, который я использую, может быть излишним, я планирую поддерживать это приложение в течение длительного времени, и я также планирую портировать его на Android Tablets, iPad и Windows 8 Framework, поэтому IMO необходимо уделить дополнительное время, чтобы получить это право .
Я пытался использовать паттерн MVP, но он не был достаточно гибким в этих условиях, чтобы работать. Я также пробовал разные фреймворки, но в итоге я разработал весь фреймворк, так как он дает мне максимальную гибкость. Это не тривиально ни в коем случае, и если вы не очень хорошо разбираетесь в абстракции, обобщениях и объектно-ориентированном дизайне, чем я предлагаю более простой подход, или вы превратите свою жизнь в ад, пытаясь заставить ее работать.
Как уже говорилось, в Android есть много входов и выходов, например, самая большая проблема, с которой я столкнулся с Android, это многопоточность или асинхронные операции и ротация действий, которые полностью уничтожат вашу активность и воссоздают ее таким образом. стирая ваш взгляд вместе с ним. Я сам выбрал путь для управления всей конфигурацией ротации, что означает, что я должен очистить все рисованные объекты и ресурсы, используемые операцией, вручную.