【发布时间】:2018-03-18 14:41:33
【问题描述】:
public class Person
{
protected Map<String, String> data;
public String getString(String key)
{
return getData().get(key);
}
public void setString(String key, String val)
{
getData().put(key, val);
}
}
我想要一个灵活的对象,它可以改变并最终拥有新的字段,或者根据用户的需要,字段最终会被闲置。
首先说用户只需要基本字段:姓名、年龄、身高。
但稍后另一个用户需要在已使用的字段之上捕获:头发颜色、眼睛颜色和种族
使用字符串,字符串映射是否可行?
我可以创建所有字段
int age;
int height;
String name;
String eyeColor;
...
但我的“Person”只能通过这些字段扩展到目前为止。不确定最佳实践是什么,或者字符串映射是否是路线。任何见解将不胜感激。
这个项目是一个用于保险目的的 crud 应用程序。每个分公司以不同的方式存储驱动程序并以不同的方式使用驱动程序信息,因为哪些数据字段被捕获,哪些未被捕获。有些人记录了某人发生了多少事故,有些则没有。有些需要多年驾驶和驾驶员等级,而有些则不需要。我不确定制作灵活对象的最佳设计实践,该对象扩展到每个分公司的案例,而不创建多个驱动程序扩展对象,因为每次新运营商进来时,我都需要一个新对象来满足他们的需求
使用:
Java JSP/Struts2 MySQL 作为数据库。
【问题讨论】:
-
如果您知道您的键始终是字符串(即“姓名”、“身高”、“年龄”等),您也许可以使用
。它会使它变得更通用,并且您始终可以以不同的方式解析对象。这个问题有更多的背景吗?如果我们知道 Person 的用途以及如何/何时在程序中添加字段,我们可能会给您更多的见解。 -
如果你反对强类型,你确定要使用Java吗?切换语言可能比绕过基本语言设计更容易。
-
它是动态的,但与普通字段相比,性能较重。我会确保您不能使用其他用户可以扩展的基类或装饰器模式,然后再退回到您提出的解决方案。
-
您将需要更具体,有时可以。您实际上想解决什么设计问题?
-
@Oleg 该项目是一个用于保险目的的 crud 应用程序。每个分公司以不同的方式存储驱动程序并以不同的方式使用驱动程序信息,因为哪些数据字段被捕获,哪些未被捕获。有些人记录了某人发生了多少事故,有些则没有。有些需要多年驾驶和驾驶员等级,而有些则不需要。我不确定制作灵活对象的最佳设计实践,该对象扩展到每个分公司的案例,而不创建多个驱动程序扩展对象,因为每次新运营商进来时,我都需要一个新对象来满足他们的需求跨度>