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