首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出对象-最佳实践

列出对象-最佳实践
EN

Stack Overflow用户
提问于 2012-01-26 01:40:52
回答 3查看 386关注 0票数 1

所以我工作的地方来了个新人。我自己是一个相当初级的程序员,但我已经开发了一段时间,所以我用我的“直觉”来指导我们开发一个项目。盲人引导盲人。

刚刚发生了一件相对较小的事情,我想知道创建这篇文章的最佳方式是什么,以及为什么。

本质上,有一个基本的XML文件,其中包含文件的详细信息(结构并不重要)。他开始查询这个XML文件,然后通过创建几个列表来存储所有检索到的文件,如下所示:

代码语言:javascript
复制
List<Integer> fileId = new List<Integer>;
List<String> title = new List<String>;

然后,您将创建一个方法,该方法将根据这些列表查询ID。

我设想将创建一个方法来查询XML文件中的文件,而无需存储/设置任何内容,如下所示:

代码语言:javascript
复制
public Form getFile(Integer id) {
  Form ret = new Form();
  //Query XML, set to ret...
  return ret;
}

我想使用值对象,因为这是我习惯的工作方式。因此,建议并最终解决此问题:

代码语言:javascript
复制
List<Form> forms = new List<Form>;

所以现在,我们有两个方法,一个用来填充'forms‘变量,另一个用来查询并返回表单...对我来说还是很奇怪。

此外,不是:

代码语言:javascript
复制
Form tempForm = new Form();
tempForm.id = 1;
tempForm.title = "Foo";

他更喜欢这样做:

代码语言:javascript
复制
Form tempForm = new Form(id, title);

纯粹是因为它排成一行,看起来更整洁。但后来,我不认为使用这样的值对象是最好的方法。

也许我是在担心和思考一些事情,而不是继续进行开发,但任何关于这方面的建议都会很好。

EN

回答 3

Stack Overflow用户

发布于 2012-01-26 01:45:48

关于你的第二个风格问题:

使用构造函数的原因之一是,您可以使表单对象不可变,如下所示:

代码语言:javascript
复制
public class Form {
  private final String id;
  private final String title;
  public Form(String id, String title) {
    this.id = id; this.title = title;
  }
  public String getTitle() { return title; }
  public String getId() { return id; }
}

这有助于避免并发问题。

票数 2
EN

Stack Overflow用户

发布于 2012-01-26 02:09:36

我不确定我是否正确理解了您的问题,但从根本上讲,这听起来像是一个性能问题。ie:是否值得读取整个XML文件,并对其进行重组,以便更快、更容易地进行查询,还是每次都扫描xml文件并对其进行查询更好。这是一个只有你能回答的问题。像往常一样,这是您必须评估的空间速度权衡。

如果您的XML文件很大,需要大量内存进行缓存,而您只是偶尔查询,那么您的解决方案可能更好。如果它很小,而且速度很关键,那么缓存它是一个好主意。

话虽如此,您可以使用几个不同的库以不同的方式加快处理速度。您可以考虑使用XQuery和/或XPath (请参阅How to read XML using XPath in Java)、JAXB、SAX等。每种技术都有其优缺点。

希望这将为你们提供更多的背景知识,以便你们可以相互讨论。

票数 1
EN

Stack Overflow用户

发布于 2012-01-26 02:29:59

有趣的问题!然而,其中有几个问题。让我分别回答每一个问题。

让我首先介绍一下在domaindrivendesign.org中找到的值类型的定义

定义:值对象是一个对象,它描述了一些特征或属性,但没有携带身份的概念。

例如,文件路径是一个字符串,但它对字符串的格式和一些操作也有一些限制。在这里,创建一个值对象将是一个好主意。还要注意的是,路径没有携带标识符号。也就是说,表示相同路径的两个path对象将被视为相等。

现在到实际的问题,我强烈推荐你的编码方式-为属于一起的数据创建一个类。在第一个示例中,idtitle仅通过索引关联到两个单独的列表。

最好使用下面的形式

代码语言:javascript
复制
Form tempForm = new Form(id, title);

这样,Form类就可以是immutable类,这将为您带来极大的可读性优势和性能提升。此外,类的字段也被封装。

现在到你觉得奇怪的最后一件事了--有两个方法,一个用于创建列表,另一个用于查询列表。

在这里,我实际上创建了一个新类,只包含这两个方法,而不是在静态类中指定它们。我会把它叫做FormCollection。你们可能会想出一些更聪明的名字,因为你们有更多的上下文。花最多五分钟的时间想出一个有意义的名字。

您还可以进一步重构您的代码,例如,将xml文件路径或流作为构造函数参数,然后使用单个方法在id上查询它。如下所示:

代码语言:javascript
复制
class FormCollection
{
    public FormCollection(String xmlFilePath) { ... }
    public Form getById(int id) { ... }
}

这可能是应用程序其余部分的一个很好的接口,因为它简单且切中要害。而且它也很容易测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9007377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档