Language agnostic 最大化数据,最小化代码-限制和问题是什么? 我想设计非常高的可用性(从不带服务器下,不重启等的滚动特性)应用程序,同时具有客户端(可能是C++的GUI)和服务器组件(java,C++,perl)。p>

Language agnostic 最大化数据,最小化代码-限制和问题是什么? 我想设计非常高的可用性(从不带服务器下,不重启等的滚动特性)应用程序,同时具有客户端(可能是C++的GUI)和服务器组件(java,C++,perl)。p>,language-agnostic,programming-languages,Language Agnostic,Programming Languages,我从(和)那里得到了一些建议,我希望使大多数逻辑能够从数据库中动态读取,这样所有配置(包括所有GUI配置、文本翻译等、业务规则以及数据)都将驻留在数据库中的服务器上,而不是需要重新启动才能读入可执行内存的代码中 我希望能够在不重新启动客户端或服务器的情况下自定义应用程序的任何方面,并让应用程序以尽可能短的延迟反映更改(动态类加载等) 设计这种“永不杀戮”系统的性能和其他限制是什么?有人创建过这样的应用程序吗?主要的教训是什么?什么时候这不划算,需要更传统的构建、发布、qa和几个小时的停机方法?我

我从(和)那里得到了一些建议,我希望使大多数逻辑能够从数据库中动态读取,这样所有配置(包括所有GUI配置、文本翻译等、业务规则以及数据)都将驻留在数据库中的服务器上,而不是需要重新启动才能读入可执行内存的代码中

我希望能够在不重新启动客户端或服务器的情况下自定义应用程序的任何方面,并让应用程序以尽可能短的延迟反映更改(动态类加载等)


设计这种“永不杀戮”系统的性能和其他限制是什么?有人创建过这样的应用程序吗?主要的教训是什么?什么时候这不划算,需要更传统的构建、发布、qa和几个小时的停机方法?

我在一个MUD游戏服务器上工作,该服务器可以动态编译脚本,这样游戏中的几乎任何内容都可以在运行时更改和重新编译,而无需断开任何用户的连接

也许我从这个项目中学到的最大教训是,当你编写的代码非常灵活,可以做任何事情时,实际上什么也做不了。

最终,系统的用户不再输入数据——他们正在编写一种神秘的代码语言,这是我的系统所独有的


要警惕灵活性——给代码增加灵活性就像在手臂上增加肘部。有几个关节去你想去的地方是很好的,但是如果你有太多的肘关节,它会变得很弱,很难指挥。

我在一个泥浆游戏服务器上工作,该服务器可以动态编译脚本,这样游戏中的几乎任何东西都可以在运行时更改和重新编译,而不必断开任何用户的连接

也许我从这个项目中学到的最大教训是,当你编写的代码非常灵活,可以做任何事情时,实际上什么也做不了。

最终,系统的用户不再输入数据——他们正在编写一种神秘的代码语言,这是我的系统所独有的


要警惕灵活性——给代码增加灵活性就像在手臂上增加肘部。有几个关节可以很好地达到你想要的位置,但是如果你肘部太多,它就会变得很弱,很难直接引导。

< P>一些不太不同的考虑是在一个脚本解释器上使用一个静态的和小的代码基,如Rhino:

这样,所有的逻辑和数据都可以放入可重新加载的脚本中,程序的唯一核心部分是脚本运行程序和类似shell的部分

这对性能肯定是不利的,我认为这是一个必然的结果


如果我记得正确的话,YigGE在他的博客上贴了一次类似的东西,所以如果你再和他谈谈,可能会问他这个问题。

< P>一些不太不同的考虑是在一个脚本解释器上使用一个静态的和小的代码基础,比如Rhino:

这样,所有的逻辑和数据都可以放入可重新加载的脚本中,程序的唯一核心部分是脚本运行程序和类似shell的部分

这对性能肯定是不利的,我认为这是一个必然的结果

如果我没记错的话,Yegge曾经在他的博客上发布过类似的东西,所以如果你再和他交谈,你可能会问他这件事。

关于“系统用户不再输入数据——他们在编写一种神秘的代码语言”。该应用程序不会让用户编辑程序逻辑或外观,而是由我或其他技术人员完成。这个想法是为了消除大量的转出,这是一个很好的观点——我想我把管理员也算作“用户”。本质上,我意识到我引入了一个过于灵活的抽象层。我认为这个始终处于运行状态的服务器是一个好主意,但我的实例中的主要问题是它太通用了。做一件事,把它做好。关于“系统的用户不再输入数据——他们正在编写一种神秘的代码语言”。该应用程序不会让用户编辑程序逻辑或外观,而是由我或其他技术人员完成。这个想法是为了消除大量的转出,这是一个很好的观点——我想我把管理员也算作“用户”。本质上,我意识到我引入了一个过于灵活的抽象层。我认为这个始终处于运行状态的服务器是一个好主意,但我的实例中的主要问题是它太通用了。做一件事,把它做好。