Создание класса-обёртки - PullRequest
       11

Создание класса-обёртки

1 голос
/ 14 февраля 2010

В моем веб-приложении Spring MVC есть два определения классов с именами Class и Object соответственно:

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


}


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


}

У меня также есть служба, которая возвращает список классов и объектов, определенных следующим образом.

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 соответственно

Что бы я хотел позволить текстовому полю поиска просто искать как классы, так и объекты, возвращая, возможно, объединенный список - List - если вы хотите, чтобы и классы, и объекты, используя метод getObjectorClassSeedSearch

Что было бы лучшим путем для реализации этого. Я смутно знаю, что хочу создать класс-обертку, который будет принимать и класс, и объект и, возможно, полиморфно во время выполнения определять, что это за экземпляр и элемент, когда они возвращаются из списка. Я предполагаю, что у меня будет соответствующий бин для этого в моем приложении. возможно упражнение с дженериками.

Какой эффективный способ продолжить?

Спасибо

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Имеют общий интерфейс / абстрактный класс для них обоих:

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

Вы можете вернуть один список , если это необходимо.

Хорошие имена имеют значение. Перегрузка «Class» и «Object», когда они уже являются частью пакета java.lang, вызовет у вас и будущих сопровождающих ваше горе.

Это могут быть примеры, но я не вижу причин ни для одного из этих классов. Там нет абстракции или богатого поведения. Я бы сказал, что этот дизайн стоит переосмыслить, основываясь на том, что я вижу здесь.

1 голос
/ 16 февраля 2010

Я рекомендую создать интерфейс и использовать какой-то метод «получения подробностей», который реализуют и класс, и объект. Выяснить, что общий метод может быть сложным, но в худшем случае вы можете просто использовать 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;
    }
}

Очевидно, что это упрощенный пример, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...