【发布时间】:2015-12-13 16:10:40
【问题描述】:
我有一个想要填充信息的对象。我从许多不同的服务中检索信息。我创建了一个辅助类,它有一个公共方法,然后有许多私有方法来完成调用服务的工作。我写的效果很好,但我不确定这是否是正确的方法。
您可能想知道为什么我需要一个包含所有这些信息的对象。我需要将它全部放在一个对象中,因为我从这个 java 对象创建了一个 json 对象并将其传递给 javascript 层。
我的方法有什么问题,是否有我应该遵循的编程范例来做这样的事情?
例子:
Person 对象,包含名字、姓氏、年龄、身高、体重、喜爱食物列表、喜爱国家列表、cmets 列表的 getter 和 setter。
- 服务 1 提供名字、姓氏、年龄、身高和体重
- 服务 2 给出最喜欢的国家列表和最喜欢的食物列表
- 服务 3 给出了该人制作的 cmets 的列表
我有一个如下所示的 personHelper 类:
public class PersonHelper{
public Person getPerson(userDetails){
Person person = new Person();
this.setPersonDetails(person, userDetails);
this.setFavourites(person, userDetails);
this.setComments(person, userDetails);
return person;
}
private Person setPersonalDetails(Person person, UserDetails userDetails){
returnedObj = callToService1(userDetails);
person.setFirstName(returnedObj.getFirstName());
person.setLastName(returnedObj.getLastName());
person.setAge(returnedObj.getAge());
person.setHeight(returnedObj.getHeight();
person.setWeight(returnedObj.getWeight());
return person;
}
private Person setFavourites(Person person, UserDetails userDetails){
<List>favsList = callToService2(userDetails);
person.setFavourites(returnedObj.getFavs(favsList));
return person;
}
private Person setComments(Person person, UserDetails userDetails){
<List>commentsList = callToService3(userDetails);
person.setComments(returnedObj.getComments(commentsList));
return person;
}
}
然后在我的控制器中调用
person = personHelper.getPerson(userDetails);
jsonResponse = jsonProcessor.writeAsString(person);
return jsonResponse; // returns the ajax response to js
提前感谢您的任何帮助或建议。
编辑:经过更多研究,我发现我正在填充的对象被称为数据传输对象,我正在使用 Java Bean 方法填充它。
【问题讨论】:
-
看起来不错,我会这样做
-
我觉得不错。我只是在这里陈述我的观点 - 你可以在
getPerson方法本身中获得这 3 种方法的陈述。由于这些是简短的方法,它们无论如何都会在运行时内联。另一个变化是您不必明确地说this.setPersonDetails(),只需setPersonDetails()就可以了,因为this隐含在其中。 -
谢谢(你们俩)。我只是觉得有些不对劲。有些方法比问题中的方法大。此外,我对所有私有方法都有单元测试(我将它们更改为受保护的,以便我可以测试它们)。所以这就是为什么我把它分成私有/受保护的方法。