客户端 – 服务器代码应该写在一个“项目”还是两个?

我一直在开始客户端 – 服务器应用程序。 起初我自然地在Eclipse中创建了两个项目,两个源代码控制存储库等等。但我很快就发现两者之间有一些共享代码可能会从共享中受益(在同一个项目中或在共享库中)而不是复制。

另外,我一直在学习和尝试测试驱动开发,在我看来,基于真实的客户端组件进行测试会更容易,而不是只需要设置大量的代码来模拟某些东西,代码可能主要在客户端。 在这种情况下,似乎在一个项目中将客户端和服务器放在一起,由根包(org.myapp.client。*和org.myapp.server。 ,也许是org.myapp.shared。 )进行了细分

然而,我在合并客户端和服务器时最关心的是安全性; 如何确保代码的服务器部分不会到达用户的计算机? 当Eclipse捆绑一个JAR时,我必须选择特定于服务器的位,希望我不会错过任何一个,对吧?

因此,特别是如果您自己编写客户端 – 服务器应用程序(尤其是在Java中,尽管如果您想在其他语言中分享您的经验,这可能会变成与语言无关的问题),您保持什么样的分离?您的客户端和服务器代码之间? 它们只是在不同的包/命名空间中,还是使用共享库完全不同的二进制文件,还是完全不同的东西? 你如何一起测试代码然后单独发货?

都不是。 它应该是3.(常见的,客户端和服务器)但是,它不一定需要是三个“项目”。 使用Maven我在主项目下创建了三个子模块。 您可以使用Ant执行类似的操作。

这很大程度上取决于您的具体实现,但我通常会发现您至少有三个使用这样的项目创建的程序集(二进制文件)。

  1. 包含客户端和服务器使用的共享function的公共DLL
  2. 客户端的DLL / Exe
  3. 服务器的Dll / exe

使用此方法可以获得共享项,但是请确保特定于服务器的项永远不会位于发送到客户端工作站的分发中。

我发现每个完成的实体(服务器部署,客户端二进制等)至少有一个项目适用于例如Hudson。 然后,您可以在所有人都可以使用的基本项目中共享代码。