| 很多服主都很羡慕Hypixel,很想把Hypixel的功能搬进自己的服务器。先不提创造力的问题,只在技术层面上讨论,Hypixel不是简单的BungeeCord和Spigot堆出来的,背后肯定有一个较为成熟的分布式系统。 
 设计一个很复杂的分布式系统不是一件很简单的事。试想你需要为你的生存服务器编写经济、权限、地图管理、备份、地皮、商店、粒子、浮空文字等各种插件,或为你的小游戏服务器开发一套系统支持够弹性创建销毁房间、好友组队、防作弊等各种插件,并且要求数据共享,还要有良好的鲁棒性和容错机制。
 
 如果翻一翻两三年前一个大型非模块化项目的代码(如果有的话),你还能快速读懂代码并且添加功能吗。因为这个项目不是模块化的,实现不同功能的部分没有清晰界限,而Java的package只能解决一部分问题。如果这需要读懂这个项目的一部分代码,你也被迫会在类与类之间跳来跳去。如果你真的强制把视线锁定在一部分代码上面,因为你对其他部分的实现没有了解,有很大几率你新写出的代码会有bug。如果能编写合理的interface,清晰准确地划分功能与功能之间的实现,这些问题会好很多。大部分开发者都可以做到这点。可是,即使这样,你也有可能写出来很乱的代码(笑)。你还要注意另一个OO的思想:高内聚,低耦合。
 
 模块化可以解决这些问题。设计系统时,模块和模块之间的界限和模块的相互关系都很清晰,这对提升系统鲁棒性很有帮助,也可方便日后代码的维护和新功能的添加(这是你需要做的)。运行时模块间package的暴露,模块间依赖关系的处理,Dependency Injection等也很重要(这是OSGi容器需要做的)。
 
 Bukkit API 和 Sponge API及其实现已经有了一定程度的模块化以及热更新的支持,但OSGi的功能比还差了很多。
 |