创建包装器类

时间:2010-02-14 02:54:57

标签: java spring spring-mvc

我的Spring MVC Web应用程序中分别有两个类定义:Class和Object:

public Class {
//instance variables
int classId;
int className;


}


public Object {
    //instance variables
int objectId;
int objectName;


}

我还有一个服务,它返回一个Class和Object列表,定义如下。

package com.service;


import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import com.domain.Class;
import com.domain.Object;
import com.service.SearchManager;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


import java.io.Serializable;

public class SempediaSearchManager implements com.service.SearchManager {

    private SessionFactory sessionFactory;
    private List<Class> classes;
    private List<Object> objects;



     public List<Class> getClassSeedSearch(String classSeed) {
         Configuration configuration = new Configuration().configure();
         sessionFactory = configuration.buildSessionFactory();
         Session session = sessionFactory.openSession();
         try {
         Query query = session.createQuery("from Class c where lower(c.className) like lower('"
                 + classSeed + "%')");
         return query.list();
         } finally {
         session.close();
         }

     }
     public List<Object> getObjectSeedSearch(String objectSeed) {
         Configuration configuration = new Configuration().configure();
         sessionFactory = configuration.buildSessionFactory();
         Session session = sessionFactory.openSession();
         try {
         Query query = session.createQuery("from Object o where lower(o.objectName) like lower('"
                 + objectSeed + "%')");
         return query.list();
         } finally {
         session.close();
         }
     }


     ?????
     skeleton method
     public List<ClassesAndObjects> getObjectorClassSeedSearch(String objectOrClassSeed) {
      ?????
     }

我提供的视图有一个搜索框,允许用户根据方法getObjectSeedSearch和getClassSeedSearch - List,List分别返回的repsective列表搜索类或对象

我想让搜索文本框简单地搜索类和对象,返回可能是合并列表 - 列表 - 如果你想通过利用方法 getObjectorClassSeedSearch 强>

实现这一目标的最佳方式是什么? 我隐约知道我想要创建一个包装类,该类包含Class和Object,并且可能在运行时以多态方式确定从列表中返回支持的实例和项目。我猜我在我的应用程序中会有相应的bean。也许是一个带有泛型的练习。

什么是有效的方法?

由于

2 个答案:

答案 0 :(得分:2)

为它们提供通用接口/抽象类:

public abstract class Name
{
    private int id;
    private String name;
    // all attendant ctors and getter/setter stuff here.
}

您可以返回一个列表&lt;名称&gt;按需要那样。

好名字很重要。重载“Class”和“Object”,当它们已经是java.lang包的一部分时,只会让你和未来的维护者对你的代码感到悲伤。

这些可能是示例,但我认为没有理由选择其中任何一个类。没有抽象或丰富的行为。根据我在这里看到的内容,我认为这是一个值得重新思考的设计。

答案 1 :(得分:1)

我建议创建一个接口并使用某种类型和对象实现的“获取详细信息”方法。弄清楚常见的方法可能很难,但最糟糕的情况是你可以使用instanceof并在将它从列表中删除后进行投射(尽管这可能是设计不良的症状)。

例如:

public interface SearchResult {

    public String getDetails();

}

然后:

public class Class implements SearchResult {
    int classId;
    int className;

    public String getDetails() {
        return "id " + classId + ", name " + className;
    }
}

public class Object implements SearchResult {
    int objectId;
    int objectName;

    public String getDetails() {
        return "id " + objectId + ", name " + objectName;
    }
}

显然这是一个简单的例子,但你明白了。