-2

我有一堆接近 100 的产品,每个产品在 DB 中都有自己的表,为此我已经为每个产品实现了搜索功能,现在我正在考虑重用代码,因为除了少数参数和表名其余逻辑都保留相同的,

字符串测试 = request.getParameter("test");

测试是包含产品信息的下拉列表,

我的想法是

if ( test.equals(ProductA)) {
          List<searchbean> list = dao.fetchDBRecords(tableA,other parameters of form);
        }

列表中的参数传递给 sql 查询。

现在我的问题是,对多个产品使用一个类是否有意义,或者对每个产品使用单独的类更有意义。

我问这个有两个原因,在一段时间内,我的代码库似乎增加了很多(300 多个类),我需要一种方法来控制它的进一步增长。这通常是如何处理的?如果我为多个产品选择单一课程,我会遇到任何需要注意的并发问题吗?

4

2 回答 2

0

我不喜欢“每个产品的类”或“每个产品的表”模型。您不必在每次添加或删除产品时都修改代码。您将不得不稍微抽象地考虑这个问题,但只要您不走得太远并造成无法辨认的混乱,这将是值得的。

你总是需要担心并发问题,但我认为这对于任何一种设计都是正确的。

您有 300 多个课程,并且要添加更多课程?你担心并发吗?并发性当然很重要,但您必须首先驯服您的设计。

于 2012-09-29T02:19:31.673 回答
0
  1. 确保不会通过从请求中获取参数并注入查询来创建 SQL 注入问题。
  2. 您应该对所有产品使用相同的类。如果某些产品具有附加功能,请使用属性映射(首选),或使用继承从主产品类派生子产品。
  3. 对所有产品使用一个类不会有任何并发​​问题。您只会遇到来自多个线程的类实例(不是类,而是类的实例)的并发问题。
  4. 按照您的操作方式,您将有超过 300 次比较(if (parameter.equals(product1){...})。更通用的方法是预填充哈希映射并使用参数作为键查找值:

    Map<String, String> tableNameMap=new HashMap<String, String>(); tableNameMap.put("param1","table1");
    tableNameMap.put("param2","table2");

    String paramValue=request.getParameter("test");
    String tableName=tableNameMap.get(paramValue);

于 2012-09-29T07:08:09.460 回答