понедельник, 5 октября 2009 г.

PJP: словарь: Bean vs Entity

Bean - определяется по форме. Entity - по содержанию.
Java Bean - не путать с EJB и Web beans.
---
Bean(Java Bean): имеет свою страницу на САНе -> тут, скачать спеку можно -> тут, tutorial -> тут.
Если совсем кратко - это класс
- имеющий публичный конструктор без аргументов
- доступ к полям обеспечивается через getter/setter
Entity: класс в той или иной степени соответствующий сущности (не процессу, не роли, не ...) реального мира.
---
Пример Bean and Entity:

class User {
private String name;
private int age;

public User() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
}

---
Пример Bean and NOT Entity:
// write permission to specific file in specific date diapasone
class WritePermission {
private Date dateFrom;
private Date dateTo;
private String fileName;

public WritePermission() {
}

public Date getDateFrom() {
return dateFrom;
}

public void setDateFrom(Date dateFrom) {
this.dateFrom = dateFrom;
}

public Date getDateTo() {
return dateTo;
}

public void setDateTo(Date dateTo) {
this.dateTo = dateTo;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}
}

---
Пример NOT Bean and Entity:
// 1) have not default constructor
// 2) produced by Manager manager = Manager.newManager("XXX");
// 3) getter must be getName(), not name()
class Manager {
private final String name;

private Manager(String name) {
this.name = name;
}

public static Manager newManager(String name) {
return new Manager(name);
}

public String name() {
return name;
}
}

3 комментария:

  1. Как я понял, получается так:
    Bean - некоторый класс, написанный по определенным правилам. Bean'ы как части системы, но одними этими частями система не описывается, еще нужны классы описывающие связи между частями, классы описывающие действия Bean'ов. Программировать используя Bean'ами - показатель профессионализма?

    Entity - это объект материального мира,но реализованный в произвольной форме, по личному усмотрению программиста. Программировать Entity не Bean'ами можно, но не нужно. Так? :)

    ОтветитьУдалить
  2. Roman>Bean'ы как части системы, но одними этими частями система не описывается, еще нужны классы описывающие связи между частями, классы описывающие действия Bean'ов.
    Да, существует еще около 10 типов классов. Ну это в стандартном простом проекте. Я их приведу.

    Roman>Entity - это объект материального мира,но реализованный в произвольной форме, по личному усмотрению программиста. Программировать Entity не Bean'ами можно, но не нужно. Так? :)
    Именно. Формат Bean - это стандарт. Он впервые вводился, для того, что бы описывать визуальные компоненты, как в Делфи. Вроди тут - Design-Time API for JavaBeansTM JBDT[http://www.jcp.org/en/jsr/detail?id=273]. Но из Явы Делфи не вышло. Но вот буквально за последний год резко возрос интерес к бинам:
    - Beans Binding ( Provide an API that allows two properties of two beans to stay in sync.)[http://www.jcp.org/en/jsr/detail?id=295]
    - Bean Validation (This JSR will define a meta-data model and API for JavaBeanTM validation based on annotations, with overrides and extended meta-data through the use of XML validation descriptors.)[http://www.jcp.org/en/jsr/detail?id=303]
    - еще есть в Java[tm] API for XML Processing(JAXP) [https://jaxp.dev.java.net/] всякого рода маппинги Bean<->XML

    ОтветитьУдалить
  3. Короче.. Как понимаю, bean - инкапсулированный класс. Entity - объект или явление реального мира. На сущностях строятся, к примеру, реляционные базы данных.

    В ООП не всегда удается перенести сущности "как они есть", в ход идут некоторые упрощения, а также появляются добавочные Bean'ы, которые вообще с точки зрения реального мира не несут никакой информации и ничего не отражают (не являются сущностями), но имеют определенный программный смысл.

    ОтветитьУдалить