属性过多的java编辑对象 背景
我有一个类属性过多的java编辑对象 背景,java,design-patterns,architecture,software-design,Java,Design Patterns,Architecture,Software Design,我有一个类Person,它有很多属性 我想要什么 允许用户编辑这些属性 我试过的 create函数其参数是所有属性,创建一个sql语句,然后调用存储过程 问题 也许用户只想编辑他的一个参数(这是更常见的情况),所以在我看来,他必须输入所有属性,即使他只想编辑其中一个 我试过的2 为每个属性创建函数以对其进行编辑 问题 我必须用太多的sql语句编写太多的函数 我的问题 解决问题的最佳方法是什么?这有什么设计模式吗 提前感谢您可以将要更新的属性作为映射,其中键==您的属性名称和值=属性值 这样 您
Person
,它有很多属性
我想要什么
允许用户编辑这些属性
我试过的
create函数其参数是所有属性,创建一个sql语句,然后调用存储过程
问题
也许用户只想编辑他的一个参数(这是更常见的情况),所以在我看来,他必须输入所有属性,即使他只想编辑其中一个
我试过的2
为每个属性创建函数以对其进行编辑
问题
我必须用太多的sql语句编写太多的函数
我的问题
解决问题的最佳方法是什么?这有什么设计模式吗
提前感谢您可以将要更新的属性作为
映射,其中键==您的属性名称和值=属性值
这样
- 您可以通过
Map
- 您甚至可以在不限制用户为其他属性赋值的情况下更新单个属性
一旦用户提供了相同的内容,您就可以遍历地图的条目,并相应地更新Person
对象
编辑:假设Person
具有name
和age
属性,然后提供方法updatePerson
aMap
,其中包含[键为“name”,值为“Actual name”],[键为“age”,值为“15”]
等条目
然后在更新方法中,您可以迭代映射
,并获得要更新的属性,如下所示
public boolean updatePerson(Map<String,Object> valueMap) {
for(Entry<String, Object> enrty : valueMap.entrySet()) {
String key = enrty.getKey();
//Person p = ... logic to get person
if("name".equals(key)) {
//p.setName(enrty.getValue());
}
else
if("age".equals(key)) {
//...
}
//finally update Person into DB...
}
return true;
}
public boolean updatePerson(Map-valueMap){
对于(条目enrty:valueMap.entrySet()){
String key=enrty.getKey();
//Person p=…获取Person的逻辑
如果(“名称”。等于(键)){
//p、 setName(enrty.getValue());
}
其他的
如果(“年龄”。等于(关键)){
//...
}
//最后将Person更新为DB。。。
}
返回true;
}
可能是您可以将要更新的属性作为映射,其中键==您的属性名称和值=属性值
这样
- 您可以通过
Map
- 您甚至可以在不限制用户为其他属性赋值的情况下更新单个属性
一旦用户提供了相同的内容,您就可以遍历地图的条目,并相应地更新Person
对象
编辑:假设Person
具有name
和age
属性,然后提供方法updatePerson
aMap
,其中包含[键为“name”,值为“Actual name”],[键为“age”,值为“15”]
等条目
然后在更新方法中,您可以迭代映射
,并获得要更新的属性,如下所示
public boolean updatePerson(Map<String,Object> valueMap) {
for(Entry<String, Object> enrty : valueMap.entrySet()) {
String key = enrty.getKey();
//Person p = ... logic to get person
if("name".equals(key)) {
//p.setName(enrty.getValue());
}
else
if("age".equals(key)) {
//...
}
//finally update Person into DB...
}
return true;
}
public boolean updatePerson(Map-valueMap){
对于(条目enrty:valueMap.entrySet()){
String key=enrty.getKey();
//Person p=…获取Person的逻辑
如果(“名称”。等于(键)){
//p、 setName(enrty.getValue());
}
其他的
如果(“年龄”。等于(关键)){
//...
}
//最后将Person更新为DB。。。
}
返回true;
}
最好的方法就是你的方法。你指的是哪种方法?第一个还是第二个?为什么不在sql更新中更新person的所有属性?您只有一条sql语句,用户没有编辑的属性保持不变。@nansen这确实是一个非常简单的方法,但是,用户有很多属性,因此如果他只想编辑他名字的一个字符(1字节),这意味着我将去更新他所有的信息,可能是(1MB)@MarcoDinatsoli:这是一个问题(可能是过早的)优化。在此之前,我不能绝对肯定“简单”的方法是否真的太昂贵(或者从长远来看是不灵活的),我总是喜欢它而不是复杂的。最好的方法是你的方法。你是说哪一种方法?第一种还是第二种?为什么不在sql更新中更新person的所有属性?你只有一条sql语句,用户没有编辑的属性保持不变。@nansen这确实是一种非常简单的方法,但是,用户有很多属性,所以如果他只想编辑他名字中的一个字符(1字节),这意味着我会去更新他所有的信息,可能是(1MB)@MarcoDinatsoli:这是一个优化的问题(可能是过早的)。在这之前,我不确定“简单”方法是否真的太昂贵(或者从长远来看是不灵活的),我总是喜欢它,而不是复杂的。谢谢你的回答,我不熟悉这个地图的东西,请你把一个非常小的代码作为一个例子。谢谢你的更新,我会尝试它,并考虑它,一个小时后,我的建议是使用建设者模式,这是设计的确切目的,你想要的。谢谢或者你的回答,我不熟悉这个地图的东西,请你把一个非常小的代码作为一个例子?谢谢你的更新,我会尝试它,并考虑它,只是在一个小时后,我的建议是使用建设者模式,它是专为你想要的。