Ранее я создавал кроссплатформенные приложения для Windows (в частности, клиенты WPF / Silverlight, серверная часть C # SQL Server), и вот что я сделал.
- Используется уровень обмена сообщениями или промежуточное программное обеспечение (RabbitMQ для асинхронного обмена сообщениями или веб-сервисы для запроса / ответа) и технология сериализации (Protobuffers или JSON), которая работает через все три границы.По возможности используйте межплатформенное промежуточное ПО.Вот почему я упоминаю RabbitMQ / protobuffers / JSON.
- Перенес всю бизнес-логику на сервер - клиент вообще не может получить доступ к базе данных и должен пройти через промежуточное ПО.Клиенты, включая настольные, буквально становятся тонкими браузерами, получающими доступ к службам промежуточного программного обеспечения для всех операций.
- Созданы общие сборки для хранения сообщений, контрактов данных и общих классов между клиентом (ами) и сервером, на которые могут ссылаться все клиенты исервер.
Этот последний шаг (общие сборки) включает создание 1 проекта, полностью совместимого с C # (так работает на WPF Desktop или Server) и дополнительных проектов для каждого веб-клиента (Silverlight, WP7).Для двойного развертывания кода на нескольких клиентах у вас есть одна копия исходного кода в сборке рабочего стола, а затем «Добавить как ссылку» те же исходные файлы в сборки Silverlight / WP7.Вам нужно будет иметь несколько операторов препроцессора #if, но в общем и целом можно использовать двойное развертывание больших кусков кода, используя этот метод.
Ваш стек становится
Клиенты:
все клиенты имеют сериализацию, реализации на стороне клиента веб-сервисов / промежуточного программного обеспечения и шаблоны MVVM / MVC
Промежуточное ПО:
Реализация промежуточного ПО на рабочем столе сервера / wpf может быть одинаковой.Wp7, monodroid и т. Д. Должны отличаться
Messages / DataContracts:
для всех клиентов / серверов, используя методы, описанные выше
Сервер:
Все реализации бизнес-логики, доступа к БД и промежуточного программного обеспечения на стороне сервера.Для доступа к БД я использовал PetaPoco как отличный MicroORM.Я полагаю, переполнение стека полномочий реализации microORM, но я могу ошибаться.
Я бы также взглянул на эту статью для вдохновения.Это возможно - я написал клиент-серверные приложения с клиентами SL / WPF и C #, а также с клиентскими / Java-серверами WPF, используя описанные выше методы.
С уважением,