Я начинаю клиент-серверное приложение. Сначала я естественным образом создал два проекта в Eclipse, два репозитория управления исходным кодом и т. Д. Но я быстро вижу, что между ними есть немного общего кода, который, вероятно, выиграет от совместного использования (в том же проекте или в общей библиотеке). ) вместо копирования.
Кроме того, я изучал и пробовал разработку, основанную на тестировании, и мне кажется, что было бы проще проводить тестирование на основе реальных клиентских компонентов, а не настраивать огромное количество кода просто для того, чтобы что-то издеваться когда код, вероятно, в основном в клиенте. В этом случае кажется, что клиент и сервер вместе, в одном проекте, тонко разделены корневыми пакетами (org.myapp.client. * И org.myapp.server. , возможно org.myapp.shared. тоже).
Моя самая большая проблема при объединении клиента и сервера, однако, связана с безопасностью; Как я могу убедиться, что серверные части кода не достигают компьютера пользователя? Когда Eclipse объединяет JAR, мне нужно выбрать биты, специфичные для сервера, и надеяться, что я их не пропущу, верно?
Поэтому, особенно если вы пишете клиент-серверные приложения самостоятельно (и особенно на Java, хотя это может превратиться в не зависящий от языка вопрос, если вы хотите поделиться этим опытом с другими языками), какое разделение вы держите между своим клиентом и сервером код? Они просто находятся в разных пакетах / пространствах имен или в совершенно разных двоичных файлах, использующих общие библиотеки, или что-то еще полностью? Как вы тестируете код вместе и отправляете отдельно?