Хороший способ загрузки ресурсов - PullRequest
1 голос
/ 06 марта 2011

Я разрабатываю серверное приложение на Java.Мне нужно загрузить некоторые ресурсы из разных источников (XML и базы данных).Итак, мне нужен совет о том, как правильно реализовать загрузку.

У меня есть класс «ServerX», который создает некоторый объект «Память», это те объекты, которые будут содержать загруженные ресурсы.

Я нашел два разных способа загрузки, но оба кажутся грязными.

1

public class ServerX
{
    /**
    Will hold the houses for further use.
    */
    private Memory<House> houses;

    public ServerX()
    {
        houses = new Memory<House>();

        loadHouses();
        loadXX();
        loadYY();
        LoadZZ();
        Load...
    }

    private void loadHouses()
    {
        //Pseudo code
        List<House> loaded = loadHousesFromDatabase();
        houses.addAll(loaded);
    }

    private void loadXX();

    ...
}

Но так, это затопило мой класс "ServerX".

2

public interface Loader
{
    public void loadHouses(Memory<House> toFill);
    public void loadXX(Memort<XX> toFill);
    public void loadYY(Memort<YY> toFill);
    public void loadZZ(Memort<ZZ> toFill);
}

public class SimpleLoader implements Loader
{
    //Implements methods.
}

public class ServerX
{
    /**
    Will hold the houses for further use.
    */
    private Memory<House> houses;

    public ServerX(Loader loader)
    {
        houses = new Memory<House>();
        loader.loadHouses(houses);
        loader.loadXX...
    }
}

Но, таким образом, я думаю, что попадаю в антипаттерн Poltergeist, потому что я создаю новый загрузчик только для того, чтобы выполнить запрос к файлу базы данных / XML, а затем он собирается мусором.

Итак, есть ли другой способ сделать это, или одно из моих решений достаточно хорошо?

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 марта 2011

Один шаблон, который вы можете рассмотреть, это шаблон Service Locator . Объяснение Service Locator можно найти здесь .

По сути, локатор служб - это реестр + кэш, объединенный для однократного поиска ресурса и его хранения в памяти для извлечения объектов в течение жизненного цикла приложения. Сервисный локатор в основном реализован с использованием шаблона Singleton .

0 голосов
/ 07 марта 2011

Ваше второе решение, использующее интерфейс Loader и несколько реализаций (XMLLoader и DBLoader), хорошо. Однако держите загрузчик и сервер отделенными, заставляя методы загрузки возвращать новый экземпляр Memory вместо передачи памяти в качестве ссылки. Добавьте метод copyAll в класс Memory, чтобы скопировать содержимое одной памяти в другую. (См. ArrayList.addAll или System.arrayCopy в javadoc)

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