2017-01-19 2 views
2

У меня есть класс, который используется для получения данных передачи из одного приложения в другое, а затем также для обновления, если были сделаны изменения.Как сказать, что поле не будет сохранено

public class Data { 
    private String name; 
    private String number; 
    private String info; 

    ... getters/setters... 
} 

Скажем name и number будет обновляться, если вы измените их, но, например, информации нет. Какой лучший способ сказать программистам в будущем, что это предназначено, чтобы они могли сразу его распознать?

Обновление: Он зашифрован как файл JSON, и когда я его верну, я больше не интересуюсь информационным полем. Он может быть пустым

+1

Я думаю, что слово, которое вы ищете, является _persistence_. 'name' и' number' являются постоянными, 'info' - нет. –

+0

Какие параметры у меня есть, кроме как написать комментарий рядом с полем? – user489872

+0

Если вы использовали Hibernate, тогда аннотация @Transient соответствовала бы –

ответ

2

Вы можете создать свою аннотацию, специфичную для вашего приложения. Если вы используете какую-либо инфраструктуру, например Hibernate, вы можете использовать @transient.

+2

Но OP никогда не говорил о БД и Hibernate – BackSlash

+0

Чтобы сообщить другим прогаммерам, аннотация может быть полезна, например, переопределить функциональный интерфейс. Я просто привел пример db :) @BackSlash –

+1

OP действительно упомянул пользовательскую аннотацию. В противном случае полезен только комментарий '// transient' - большинство людей должно это понимать, и сравнение с Hibernate, даже если оно не используется, действительно. – vikingsteve

0

Начало здесь https://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html

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

@Table(name = "data") 
public class Data { 
    @Id 
    @Column(name = "name") 
    private String name; 

    @Column(name = "number") 
    private String number; 

    private String info; 

    ... getters/setters... 
} 

UPDATE: Это кодируется как JSON, и когда я его верну, я больше не интересуюсь информационным полем. Это может быть пустым

0

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

Но, конечно, это было бы действительно «неформально»; так как это, вероятно, совсем не повлияет на то, как ваш фреймворк имеет дело с вашими полями.

+0

Но так как он сказал _Какой лучший способ сказать программистам в будущем, что это предназначено, чтобы они могли сразу его распознать, программисты должны прочитать документацию. – AxelH

0

Я хотел бы использовать сериализацию в сочетании с транзиторным ключевым словом

What is object serialization?

import java.io.*; 
import java.util.*; 

// This class implements "Serializable" to let the system know 
// it's ok to do it. You as programmer are aware of that. 
public class SerializationSample implements Serializable { 

    // These attributes conform the "value" of the object. 

    // These two will be serialized; 
    private String aString = "The value of that string"; 
    private int someInteger = 0; 

    // But this won't since it is marked as transient. 
    private transient List<File> unInterestingLongLongList; 
0

Там нет указания в файле, который name или number в настоящее время сохраняется.

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

public boolean isStorable() { 
    boolean isOk = true; 
    isOk &= (name != null && name.length() > 0); 
    isOk &= (number > 0); 
    return isOk; 
} 

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

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

+0

Буква полей с кучей бездействующих получателей и сеттеров не является объектно-ориентированным объектом программирования в Java, потому что в ней нет никакого поведения. Это структура данных в стиле С. Иногда они полезны в Java, и вы описываете правильный способ их реализации, но если вы реализуете такую ​​вещь, имейте в виду, что вы также теряете преимущества ООП для этой части своей программы. –

+0

Также обратите внимание, что очень много полезных фреймворков, технологий и инструментов не является идеалистически ООП. Если вы храните с определенной технологией персистентности, тогда используйте соглашения этой технологии. Например, если вы сохраняете JPA, добавьте аннотации, указывающие, какие поля сохраняются, к каким таблицам и столбцам базы данных. Люди смогут разобраться в вашей разметке, потому что структура будет информировать их о ее значении. –

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