Пожалуйста, смотрите это и это предыдущий ответ, который я дал на разработку кросс-платформенного клиент-серверного приложения, особенно с кодом- повторно использовать для нескольких клиентов. Это также применимо к вашему клиент-серверному приложению Winforms.
Как говорится во многих ответах, вы можете структурировать свое решение для совместного использования кода следующим образом:
Структура проекта
Решение
.. Common (сообщения, контракты, утилиты)
.. Middleware (References Common, предоставляет общие услуги)
.. .. Server Exe (Справочные материалы, промежуточное ПО)
.. .. Client Exe (Справочные материалы, промежуточное ПО)
Клиент-серверная архитектура верхнего уровня
Ваш стек становится
Клиенты:
Клиент имеет сериализацию, реализации на стороне клиента веб-сервисов / промежуточного программного обеспечения и модели Model-View-Presenter для представления.
Промежуточное программное обеспечение:
Промежуточное программное обеспечение, т.е. общие службы и реализация транспорта данных на сервере / клиентском компьютере, могут быть одинаковыми. В качестве альтернативы вы можете позвонить в эту Службу. Любые конкретные службы только для клиента (или только для сервера) должны идти в отдельных сборках, на которые ссылается только конкретный exe (клиент или сервер). т.е. не делитесь кодом, который не передается!
Сообщения / DataContracts:
Совместно используется всеми клиентами / серверами с использованием методов, описанных выше. В вашем случае это могут быть общие доменные объекты, совместно используемые клиентом и сервером
Сервер:
Все реализации бизнес-логики, доступа к БД и обслуживания на стороне сервера. Для доступа к БД я бы рекомендовал PetaPoco в качестве отличного MicroORM.
Разработка и отладка
Да, решение может иметь более одного exe-файла, просто используйте set Startup Project , щелкнув правой кнопкой мыши на Server Exe или Client Exe для отладки одного или другого.
Если вы хотите запустить клиент и сервер вместе, вы можете запустить как из командной строки, так и подключить отладчик к обоим процессам.
С уважением,