我一直在做一个项目,遇到了一个关于如何进行设计(面向对象)的令人费解的问题。我有不同类别的对象,例如 、、Employee
等,它们具有相同的数据:名称、ID 号等。到目前为止,我已经制作了一个界面,以及这些不同类别中的每一个这个界面。当我尝试检索数据时出现问题。Groundskeeper
Customer
Person
extends
如果我只想检索其中一个类别的对象,比如 a Customer
,我必须创建一个新方法getCustomers()
. 如果我想获得所有员工,我必须创建另一个类似的方法,称为getEmployees()
. 这对每个类别继续进行。问题是这些方法的实现几乎相同,因为每个类别的数据都是相同的。唯一的区别是每个都只返回一个特定的类别。
有没有更好的方法来做到这一点,我只需要一种方法,而不是重复自己(本着 DRY 的精神)?
注意:这些类别必须是分开的,因为在路上,我需要将每个类别放在数据库中自己的表中,所以在某些时候必须分开类别。
可能的解决方案:
我找到了解决此问题的方法,您的建议对找到它有很大帮助(@Adam me)。我没有对每个类别进行单独的方法调用,而是使用了一个泛型方法,其中类别作为泛型参数提供给该方法。此外,类别的类作为数据库表的键提供。
例如,用于获取Person
特定类别的签名将是:
public <T extends Person> Queue<T> getPersons (Class<T> key) {...}
并调用该方法,Customer
比如说,调用将是:
Queue<Customer> customers = dataStore.<Customer>getPersons(Customer.class);
Class<T>
只是使用了一个键,并且在方法内部getPersons(...)
,有一个Map
将类映射到数据库中的表(Map<Class<? extends Person>, String>)
。因此,当Person
提供 的类时(Customer
,Employee
等),在地图上执行查找,然后从与该类关联的数据库表中检索数据。
虽然它与建议的答案不同,但我非常感谢您的回复:他们引导我朝着正确的方向寻求解决方案。