Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
属性过多的java编辑对象 背景_Java_Design Patterns_Architecture_Software Design - Fatal编程技术网

属性过多的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
a
Map
,其中包含
[键为“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
a
Map
,其中包含
[键为“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:这是一个优化的问题(可能是过早的)。在这之前,我不确定“简单”方法是否真的太昂贵(或者从长远来看是不灵活的),我总是喜欢它,而不是复杂的。谢谢你的回答,我不熟悉这个地图的东西,请你把一个非常小的代码作为一个例子。谢谢你的更新,我会尝试它,并考虑它,一个小时后,我的建议是使用建设者模式,这是设计的确切目的,你想要的。谢谢或者你的回答,我不熟悉这个地图的东西,请你把一个非常小的代码作为一个例子?谢谢你的更新,我会尝试它,并考虑它,只是在一个小时后,我的建议是使用建设者模式,它是专为你想要的。