繁体   English   中英

列出对象-最佳做法

[英]List objects - best practice

因此,有一个新人开始在我的工作地点工作。 我本人还是一个初级程序员,但是我已经开发了更长的时间,所以我用自己的“直觉”来指导我们开发项目。 盲人带领盲人。

刚刚发生了一个相对较小的事情,我想知道什么是创建此代码以供将来参考的最佳方法以及原因。

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

List<Integer> fileId = new List<Integer>;
List<String> title = new List<String>;

然后,您将创建一个方法,该方法将针对这些列表进行查询以查找ID。

我想象了将创建一种方法来查询XML文件中的文件而无需存储/设置任何内容,例如:

public Form getFile(Integer id) {
  Form ret = new Form();
  //Query XML, set to ret...
  return ret;
}

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

List<Form> forms = new List<Form>;

因此,现在,我们有2种方法,一种是填充“ forms”变量,另一种是查询它并返回Form ...对我来说仍然很奇怪。

另外,代替:

Form tempForm = new Form();
tempForm.id = 1;
tempForm.title = "Foo";

他喜欢这样做:

Form tempForm = new Form(id, title);

纯粹是因为它位于1行中,并且看起来更整洁。 不过,在稍后的内容中,我不认为使用这样的值对象是最好的方法。

也许我在担心和思考很多东西,而不是继续进行开发,但是关于此的任何建议都是很棒的。

关于第二种风格的问题:

使用构造函数的原因之一是,您可以像下面这样使Form对象不可变:

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; }
}

这有助于避免并发问题。

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

如果您的XML文件很大,并且需要大量内存来缓存,而您只是偶尔查询,那么也许您的解决方案会更好。 如果它很小并且速度至关重要,那么缓存它是个好主意。

综上所述,您可以使用几种不同的库以不同的方式加快处理速度。 您可以查看使用XQuery和/或XPath(请参阅如何使用Java中的XPath读取XML ),JAXB,SAX等。每种技术都有其自身的优点和缺点。

希望这会给您更多的背景,以便您可以彼此讨论。

有趣的问题! 但是,其中有几个问题。 让我分别回答每个问题。

首先让我确定在domaindrivendesign.org上找到的值类型的定义

定义:值对象是描述某些特征或属性但不包含身份概念的对象。

例如,文件路径是一个字符串,但它在字符串格式和某些操作上也有一些限制 在这里创建一个值对象是一个好主意。 还要注意,路径不包含标识 即,代表相同路径的两个路径对象将被视为相等。

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

最好使用这种形式

Form tempForm = new Form(id, title);

这样, Form类可以是不可变的 ,这将为您带来巨大的可读性以及性能上的好处。 该类的字段也被封装。

现在,您想到的最后一件事情很奇怪-有两种方法,一种用于创建列表,另一种用于查询列表。

在这里,我实际上将创建一个新类,仅包含这两个方法,而不是让它们在静态类中声明。 我称之为FormCollection 你们可能会想出一个更聪明的名字,因为您拥有更多的背景信息。 最多花五分钟找出一个有意义的名字。

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

class FormCollection
{
    public FormCollection(String xmlFilePath) { ... }
    public Form getById(int id) { ... }
}

这可能是您应用程序其余部分的一个很好的界面,因为它很简单而且很重要。 而且它很容易测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM