gpt4 book ai didi

java - GWT+Java : Globals, 单例和头痛

转载 作者:行者123 更新时间:2023-11-29 06:46:52 24 4
gpt4 key购买 nike

所以这是我的项目:

我正在构建一个中央界面/仪表板来显示多个产品版本的多种测试类型的测试数据。我们在我们的大型产品上使用 TestNG,虽然没有编写足够的测试,但这是另一个主题的讨论。目录结构如下所示:

文件系统/productVersion+testType/uniqueDateAndBuildID/testng-results.xml

results.xml 文件包含带有子测试标签的标签,对应于文件系统目录,然后是包含实际测试用例结果(通过、失败等)的 xml 文件XML 解析和文件系统遍历都非常好/可靠。

控制流程:客户端访问主页 --> 服务器打开属性文件 --> 服务器检查 Web 服务器属性(Websphere 或 Tomcat,如果我在本地工作) --> 服务器基于此设置一堆常量。常量包括:根文件系统目录、文件系统分隔符(翻译)、“类似类型(在不同平台上基本相同的测试)”,以及要附加到的基本 URL。 --> 服务器然后读取更多属性文件并进行所有 XML 处理。结果缓存在内存中以及使用 ObjectOutputStream 的文件系统。 --> 一个大的结果列表被发送回客户端进行 UI 处理/显示。

这是我遇到问题的地方:我无法在客户端访问那些全局变量(包含/设置在 Globals 类中......我知道很糟糕 :-/),即使它们在共享中文件夹。如果您想知道为什么我不能再次加载属性,那是因为客户端是 GWT 化的 Javascript,不包含 File()。所以我的下一个想法是,在阅读了一些高级 Java 文章后,也许可以使用一个 Globals 单例对象并将其传回……但看起来这即使不是不可能也同样糟糕。 这里的建议会很棒。

这整个事情是紧密耦合的,这是我以前的 Java 教育还没有真正涉及到的东西。由于这只是供开发人员检查的内部门户,因此实际测试我的代码似乎没有多大意义。只要能正确显示,正确记录,优雅地处理错误,对吧?总而言之,它不到 15 个类(class),所以我想这并不是什么大问题。我应该重构以清理所有内容并使其成为“更好的 Java”,对所有内容进行注释以清楚地描述控制流,还是因为它很小而不必担心太多?我知道将来在设计它们之前要多考虑一些事情,但是我真的不知道自从开始以来我接触过的大量高级 Java 原则。

edit 经过一番思考,想出了一个可能的解决方法。那么,我不是传回一个结果列表,而是传回一些包含全局“ header ”对象的其他自定义列表实现吗?我可以保持状态。

最佳答案

一个简单的解决方案是 Dictionary类:

Provides dynamic string lookup of key/value string pairs defined in a module's host HTML page. Each unique instance of Dictionary is bound to a named JavaScript object that resides in the global namespace of the host page's window object. The bound JavaScript object is used directly as an associative array.

您只需向您的主机 HTML 页面添加一些动态内容 - 让服务器以 JavaScript 对象的形式打印从属性文件中读取的值:

var GlobalProperties = {
property1: "value1",
property2: "value2"
};

然后,在您的代码中使用字典来读取这些值:

Dictionary globalProperties = Dictionary.getDictionary("GlobalProperties");
String property1 = globalProperties.get("property1");

PS:如果您正在寻找关于如何降低代码耦合度的好主意/建议 -> 更可测试,我建议 Misko Hevery's blog .他有很多有趣的帖子,比如 why singletons are usually bad (全局状态,而不是模式本身)。但最重要的是 - 它有很棒的 guide to writing testable code (Google 内部使用的一些准则)。

关于java - GWT+Java : Globals, 单例和头痛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com