java - java类设计指南

标签 java class design-patterns

我正在构建一个数据工具,允许用户构建 ETL 代码。在深入了解这一点之前,我需要构建一个“代理”来处理该工具需要执行的所有与数据库相关的工作。具体来说,这将涉及 -

  • 选择、插入、更新和删除
  • 多条记录
  • 从/到/在具有不同布局的不同表格中

我的想法是使用以下 4 个方法构建一个类 -

ArrayList[][] selectFromRepository  (String dbTable, String[] columnNames)
ArrayList[][] selectFromRepository  (String dbTable, String[] columnNames, Map<String, Object> predicate) 
void          insertToRepository    (String dbTable, Map<String, Object>[] payload)
void          updateInRepository    (String dbTable, Map<String, Object>[] payload, Map<String,Object>[] predicate)
void          deleteFromRepository  (String dbTable, Map<String, Object>[] payload)

selectFromRepository 将根据从参数“dbTable”检索到的“columnNames”中元素的类型,以异构元素的 2D 数组列表进行响应。重载版本允许通过“谓词”映射指定 where 子句谓词。我想我可以检查传递给该方法的 Map 对象元素的类型并正确构建 where 子句(例如

"where " + key + " = '" + predicate.get(k) + "'" if predicate.get(k) instanceOf String 

等等..

其他方法的工作方式与更新方法谓词类似,与重载选择的工作方式类似。

我正在寻求您关于最佳实践、我的想法的缺点的指导(以及您按照自己的方式做事的优点:))。另外,构建一个名为 DB 元素的通用类型是否有意义,该类型接受我希望用作类型输入的所有已知 DB 数据类型,然后在映射/数组列表参数中使用它而不是“对象”类型?

提前致谢!

最佳答案

这确实是一个问题。

首先我不会自己实现这个。 有许多免费的库(Spring、Hibernate) 为您完成此操作,并且以 ORM 的形式更好 ( http://en.wikipedia.org/wiki/Object-relational_mapping )。

如果您确实想自己执行此操作,我会这样做:

我将遵循 ADO 并为我拥有的每个表创建一个类。 例如,我将为我的员工表创建 Employee 类。

然后我将创建一个查询生成器,如下所示:

QueryBuilder
    .selectFrom(Employee.class)
    .equalTo(propery, value)
    .graterThenOrEqualTo(property, value);

我的属性看起来像这样:

interface Property<From, To>{
    To get(From from);
}

例如:

class EmployeeToId<Employee, Integer>{
    public Integer get(Employee emp){
        return emp.id;
    }
}

所以在我之前的例子中:

QueryBuilder
    .selectFrom(Employee.class)
    .equalTo(new EmployeeToId(), 15)
    .build().fetch(); // This returns an Optional<Collection<Employee>>;

我的查询生成器有许多方法,例如:

class QueryBuilder{
   public <Entity> SelectBuilder<Entity> selectFrom(Class<Entity> clazz);
}

这只是它的要点。 您可以根据自己的喜好将其复杂化。 但要做好,这需要很多时间,只需询问 hibernate 或 jooq。

关于java - java类设计指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25769236/

相关文章:

c# - 我应该为此使用哪种设计模式?

java - 在 InputStream 的 read() 中阻止 I/O

java - 在联合查询中引入 WHERE 子句

c++ - 解释类对象的 Gcov 报告

jquery - 将类添加到 jquery 对话框按钮

c#-4.0 - DB表和Class如何设计?

java - 问答游戏设计模式

java - 如何生成对相似数和十的幂有限制的随机数

java - Java 正则表达式中 matches() 和 find() 之间的区别

javascript - jQuery,根据数组检查类