2012-01-25 65 views
1

因此,有一个新人开始在我工作的地方。我本人也是一名初级程序员,但我已经开发了一段时间,所以我用我的“直觉”来指导我们开发一个项目。盲人领导盲人。列出对象 - 最佳实践

一个相对较小的东西刚刚出现,我想知道什么是创建这个以供将来参考和为什么的最佳方式。

基本上有一个基本的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种方法,1填充“形式”变量,然后1查询它交回表格......似乎仍然很对我来说很陌生。

代替

而且,:

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

他喜欢做的事:

Form tempForm = new Form(id, title); 

纯粹是因为它在1号线,看起来更加整洁。虽然后来下线,但我不认为使用像这样的值对象是最好的方法。

也许我很担心和考虑的东西,而不是与发展相关,但任何意见都会很好。

+0

你说的这个“价值对象”是什么? – delnan

+0

啊,价值对象是我的高级开发人员提到的名字。我想他只是做了它。它只是一个存储值的类/对象,所以你知道变量的内容是什么等等。 –

+0

Value Object在“bean-like thingie”或“假装是一个结构体”中。我在猜测 – BRFennPocock

回答

2

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

一个使用构造函数的原因是,你可以然后进行表单对象不变,如:

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

这有助于避免并发问题。

1

我不确定我是否正确理解了您的问题,但在基础上,这听起来像是一个表现问题。即:是否值得在整个XML文件中读取数据,并对其进行重构,以便查询更快更容易,或者每次扫描xml文件并对其进行查询都更好。这是一个只有你能回答的问题。像往常一样,这是您必须评估的空间速度折衷。

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

就这么说,有几种不同的库可以用来以不同的方式加速处理。您可以查看使用XQuery和/或XPath(请参阅How to read XML using XPath in Java),JAXB,SAX等。每种技术都有其优点和缺点。

希望这会给你多一点背景,你可以彼此讨论。

1

Interresting问题!然而,其中有一些问题。让我分别回答他们中的每一个。

我首先放下一个值类型的定义上domaindrivendesign.org

定义为实测值:一个值对象是描述一些 特征或属性,但不携带身份的概念的对象。

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

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

这是更好地使用这种形式

Form tempForm = new Form(id, title); 

这样的Form类可以immutable,这将给你带来很大的可读性的优点,并提高性能。此类的字段也被封装。

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

在这里,我实际上会创建一个新的类,只包含这两个方法,而不是让他们说静态类。我会称之为FormCollection。你们可以想出更聪明的名字,因为你有更多的上下文。最多花五分钟计算一个有意义的名字。

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

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

这可能是您的应用程序的其余部分的良好接口,因为它很容易并且重点突出。也很容易测试。