Показаны сообщения с ярлыком Design Patterns. Показать все сообщения
Показаны сообщения с ярлыком Design Patterns. Показать все сообщения

среда, 11 мая 2011 г.

Typesafe Enum pattern или как обойтись без Enum-ов.

Часто нужда в использовании Enum возникает в случае, если необходимо передать в метод одно из значений, например "green", "red" или "blue". Первое что приходит в голову - это принимать String:
public void method(String param) {...}

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

public enum TypesafeEnum {GREEN, RED, BLUE};

А можно ли обойтись без него? Конечно можно, ведь Enum появились только с java 1.5. Тут нам может помочь паттерн Typesafe Enum:
public class TypesafeEnum {

  private final String name;

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

  public static final TypesafeEnum GREEN = new TypesafeEnum("green");
  public static final TypesafeEnum RED = new TypesafeEnum("red");
  public static final TypesafeEnum BLUE = new TypesafeEnum("blue");

  public String toString() {
    return name;
  }
}
Теперь можно обьявить наш метод таким образом:
public void method(TypesafeEnum param) {...}
соответственно его вызов:
someObject.method(TypesafeEnum.RED);


Подробнее о паттерне здесь

пятница, 15 апреля 2011 г.

Паттерн Entity-Attribute-Value (EAV)

Паттерн "Entity-Attribute-Value" может пригодиться при проектировании базы данных товаров. Рассмотрим пример на СУБД Oracle.

В простейшем случае структура базы данных будет выглядеть следующим образом:
-- Create table
create table entity
(
  entity_id number,
  name      varchar2(50)
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table entity
  add constraint xpk_entity_id primary key (ENTITY_ID);
Таблица Entity хранит сами сущности - товары. В качестве полей указываем общие свойства сущностей, таких как Название товара
-- Create table
create table attribute
(
  attribute_id   number,
  attribute_name varchar2(50),
  attribute_type varchar2(10),
  decriptions    clob
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table attribute
  add constraint xpk_attribute_id primary key (ATTRIBUTE_ID);
Таблица Attribute хранит различные свойства товаров - атрибуты. В качестве полей указываем название атрибута, тип.
-- Create table
create table value
(
  attribute_id   number,
  entity_id      number,
  string_value   varchar2(100),
  number_value   number
);
таблица value - для хранения значений атрибутов, а также для связи многие ко многим между товарами и их атрибутами.

Реализация разных типов данных может быть реализована различными способами. Например вместо одного поля value можно создать разные поля под разные типы данных: string_value, number_value и использовать нужное исходя из типа атрибута из таблицы attribute.

Более подробная информация по паттерну