2012-01-25 3 views
1

Итак, появился новый парень, который начался там, где я работаю. Я совсем молодой программист, но я развиваюсь немного дольше, поэтому я использую свое «чувство кишки», чтобы помочь нам в разработке проекта. Слепой ведет слепого.Список объектов - лучшая практика

Относительно небольшая вещь только что пришла, и я хотел бы знать, что является лучшим способом создать это для будущих ссылок и почему.

По существу, есть основной файл XML с подробностями для файлов (структура на самом деле не актуальна). Ходил запрашивая этот XML-файл, а затем хранить все восстановленные файлы, создав несколько списков, что-то вроде этого:

List<Integer> fileId = new List<Integer>; 
List<String> title = new List<String>; 

И тогда вы можете создать метод, который будет запрашивать против этих списков ищут ID.

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

public Form getFile(Integer id) { 
    Form ret = new Form(); 
    //Query XML, set to ret... 
    return ret; 
} 

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

List<Form> forms = new List<Form>; 

Итак, у нас есть 2 метода, 1 для заполнения переменной «формы», а затем 1 для запроса его и вернуть форму ... до сих пор, кажется, очень странный для меня.

Кроме того, вместо того, чтобы:

Form tempForm = new Form(); 
tempForm.id = 1; 
tempForm.title = "Foo"; 

Он предпочитает делать:

Form tempForm = new Form(id, title); 

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

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

+0

О чем вы говорите? – delnan

+0

А, объект Value - это имя, о котором упоминал мой старший разработчик. Наверное, он просто сделал это. Это просто класс/объект, который существует для хранения значений, поэтому вы знаете, что такое содержимое переменной и т. Д. –

+0

Значение Объект как в «bean-like thingie» или «притворяясь строкой». Я предполагаю – BRFennPocock

ответ

2

На втором вопросе стиля:

Одна из причин использовать конструктор является то, что вы можете сделать свой объект Form неизменны, как в:

public class Form { 
    private final String id; 
    private final String title; 
    public Form(String id, String title) { 
    this.id = id; this.title = title; 
    } 
    public String getTitle() { return title; } 
    public String getId() { return id; } 
} 

Это помогает избежать проблем параллелизма.

1

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

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

Все, что сказано, существует несколько разных библиотек, которые можно использовать для ускорения обработки по-разному. Вы можете посмотреть на использование XQuery и/или XPath (см. How to read XML using XPath in Java), JAXB, SAX и т. Д.Каждая технология имеет свои преимущества и недостатки.

Надеюсь, это даст вам немного больше фона, на котором вы сможете обсудить друг с другом.

1

Вопросительный вопрос! Однако в одном есть несколько вопросов. Позвольте мне ответить на каждый из них отдельно.

Позвольте мне сначала сложить определение типа значения как найти на domaindrivendesign.org

Определения: Значение объект является объектом, который описывает некоторые характеристики или атрибут, но не несет никакой концепции идентичности.

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

Теперь, к настоящему вопросу, я настоятельно рекомендую ваш способ кодирования - создание класса для данных, которые принадлежат друг другу. В вашем первом примере id и title связаны только индексом по двум отдельным спискам.

Это лучше использовать эту форму

Form tempForm = new Form(id, title); 

этак Form класса может быть immutable, который даст вам большие преимущества читаемости, а также повышение производительности. Кроме того, поля класса инкапсулируются.

Теперь, к последней вещи, которую вы считали странной: два метода: один для создания списка и один для запроса на него.

Здесь я бы создал новый класс, содержащий только эти два метода вместо того, чтобы говорить их в статическом классе. Я бы назвал это FormCollection. Вы, вероятно, можете придумать какое-то более умное имя, так как у вас больше контекста. Проведите не более пяти минут, выясняя содержательное имя.

Вы также можете реорганизовать свой код, чтобы, например, взять путь или поток файла xml в качестве аргумента конструктора, а затем использовать один метод для запроса aginst it на id. Вроде так:

class FormCollection 
{ 
    public FormCollection(String xmlFilePath) { ... } 
    public Form getById(int id) { ... } 
} 

Это, вероятно, хороший интерфейс для остальной части вашего приложения, так как это легко и точно. Также легко проверить.

Смежные вопросы