所以我工作的地方来了个新人。我自己是一个相当初级的程序员,但我已经开发了一段时间,所以我用我的“直觉”来指导我们开发一个项目。盲人引导盲人。
刚刚发生了一件相对较小的事情,我想知道创建这篇文章的最佳方式是什么,以及为什么。
本质上,有一个基本的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>;所以现在,我们有两个方法,一个用来填充'forms‘变量,另一个用来查询并返回表单...对我来说还是很奇怪。
此外,不是:
Form tempForm = new Form();
tempForm.id = 1;
tempForm.title = "Foo";他更喜欢这样做:
Form tempForm = new Form(id, title);纯粹是因为它排成一行,看起来更整洁。但后来,我不认为使用这样的值对象是最好的方法。
也许我是在担心和思考一些事情,而不是继续进行开发,但任何关于这方面的建议都会很好。
发布于 2012-01-26 01:45:48
关于你的第二个风格问题:
使用构造函数的原因之一是,您可以使表单对象不可变,如下所示:
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; }
}这有助于避免并发问题。
发布于 2012-01-26 02:09:36
我不确定我是否正确理解了您的问题,但从根本上讲,这听起来像是一个性能问题。ie:是否值得读取整个XML文件,并对其进行重组,以便更快、更容易地进行查询,还是每次都扫描xml文件并对其进行查询更好。这是一个只有你能回答的问题。像往常一样,这是您必须评估的空间速度权衡。
如果您的XML文件很大,需要大量内存进行缓存,而您只是偶尔查询,那么您的解决方案可能更好。如果它很小,而且速度很关键,那么缓存它是一个好主意。
话虽如此,您可以使用几个不同的库以不同的方式加快处理速度。您可以考虑使用XQuery和/或XPath (请参阅How to read XML using XPath in Java)、JAXB、SAX等。每种技术都有其优缺点。
希望这将为你们提供更多的背景知识,以便你们可以相互讨论。
发布于 2012-01-26 02:29:59
有趣的问题!然而,其中有几个问题。让我分别回答每一个问题。
让我首先介绍一下在domaindrivendesign.org中找到的值类型的定义
定义:值对象是一个对象,它描述了一些特征或属性,但没有携带身份的概念。
例如,文件路径是一个字符串,但它对字符串的格式和一些操作也有一些限制。在这里,创建一个值对象将是一个好主意。还要注意的是,路径没有携带标识符号。也就是说,表示相同路径的两个path对象将被视为相等。
现在到实际的问题,我强烈推荐你的编码方式-为属于一起的数据创建一个类。在第一个示例中,id和title仅通过索引关联到两个单独的列表。
最好使用下面的形式
Form tempForm = new Form(id, title);这样,Form类就可以是immutable类,这将为您带来极大的可读性优势和性能提升。此外,类的字段也被封装。
现在到你觉得奇怪的最后一件事了--有两个方法,一个用于创建列表,另一个用于查询列表。
在这里,我实际上创建了一个新类,只包含这两个方法,而不是在静态类中指定它们。我会把它叫做FormCollection。你们可能会想出一些更聪明的名字,因为你们有更多的上下文。花最多五分钟的时间想出一个有意义的名字。
您还可以进一步重构您的代码,例如,将xml文件路径或流作为构造函数参数,然后使用单个方法在id上查询它。如下所示:
class FormCollection
{
public FormCollection(String xmlFilePath) { ... }
public Form getById(int id) { ... }
}这可能是应用程序其余部分的一个很好的接口,因为它简单且切中要害。而且它也很容易测试。
https://stackoverflow.com/questions/9007377
复制相似问题