MeasureRuler: mudanças entre as edições
Criou página com 'O MeasureRuler é, pela própria tradução, uma régua de medidas. Essa régua de medidas tem a intenção de oferecer aos sistemas a facilidade para converter unidades de me...' |
|||
Linha 14: | Linha 14: | ||
= MeasureUnit = | = MeasureUnit = | ||
O MeasureRuler suporta várias dimensões de medidas | O MeasureRuler suporta várias dimensões de medidas. Cada dimensão pode conter várias unidades de medidas. A dimensão é definida pela enumeration '''MeasureDimension'''. Já as unidades de cada unidade de medida são definidas pela sua própria enumeration que estendem a interface '''MeasureUnit'''. Por exemplo: | ||
* '''Volume''' - VolumeUnit | * '''Volume''' - VolumeUnit | ||
* '''Comprimento''' - LengthUnit | * '''Comprimento''' - LengthUnit | ||
Linha 24: | Linha 24: | ||
== Interface MeasureUnit == | == Interface MeasureUnit == | ||
Cada dimensão tem suas unidades de medidas em enumerations diferentes. Assim, quando precisamos representar qualquer uma das unidades de medida utilizamos essa interface. Um exemplo: ao cadastrar um produto no sistema, a "unidade básica de estoque" dele pode ser tanto Unidades, quando Metros, Kilos, Metros Quadrados, etc.. Assim, a melhor maneira de definir este atributo é através desta interface. | |||
A interface MeasureUnit apresenta métodos como getDimension(), que retorna a enumeration de MeasureDimension para indicar que Dimensão de Medida esta Unidade pertence. | A interface '''MeasureUnit''' apresenta métodos como '''getDimension()''', que retorna a enumeration de '''MeasureDimension''' para indicar que Dimensão de Medida esta Unidade pertence. | ||
== Persistência da Interface MeasureUnit - MeasureUnitDAOConverter == | == Persistência da Interface MeasureUnit - MeasureUnitDAOConverter == | ||
Por tratar-se de uma enumeration, o padrão do FW é que no banco seja um campo do tipo varchar(50) (O limite recomendado de enums no BIS é de 50 chars). Mas uma vez que a MeasureUnit é uma interface, o BISDAO não sabe como proceder para persisti-la e reconstruir o VO com os dados do banco. Para isso temos de utilizar uma '''BISDAOConverter'''. E para simplificar o MeasureRuler já oferece uma implementação pronta para isso a '''MeasureUnitDAOConverter'''. | |||
Para definir um atributo no VO que seja do tipo '''MeasureUnit''' devemos ter algo como: | |||
{{java|Exemplos de | {{java|Exemplos de Declaração|<syntaxhighlight lang="java"> | ||
@BISDAOConverter(converterClass = MeasureUnitDAOConverter.class) | @BISDAOConverter(converterClass = MeasureUnitDAOConverter.class) | ||
Linha 44: | Linha 44: | ||
Sempre que o BISDAO lêr a String no banco de dados que representa a unidade de medida, o Converter conseguirá descobrir de qual enumeration devemos realizar o "valueOf(...)". | |||
Note que o método utilizado dentro do converter é o | Note que o método utilizado dentro do converter é o | ||
<pre>MeasureRuler.valueOf(...);</pre> | <pre>MeasureRuler.valueOf(...);</pre> | ||
, sempre que for necessário desserializar da String para uma das unidades de medida, esse método fará o trabalho. | |||
{{stop|Unidades de Medidas Iguais|Por conta de termos várias unidades de medidas de dimensões diferentes representadas em enumerations diferentes, o Java permitirá que tenhamos uma unidade de medida "X" tanto em '''VolumeUnit''' quanto em '''AreaUnit'''. Embora o Java não tenha problemas para compilar esse código, ao ser persistido no banco de dados (salvo apenas o NAME da enumeration), a recuperação do objeto é baseada apenas no nome da enumeration. Isso fará com que seja sempre retornada pela primeira enumeration que o código procura. | |||
{{stop|Unidades de Medidas Iguais| | |||
Para evitar esse problemas as unidades de medidas devem '''sempre ter nomes diferentes mesmo que em dimensões distintas'''. Embora não conheça nenhuma unidade de medida que tenha o mesmo o nome e represente coisas diferentes, é bom que o DEV tenha ciência dessa situação. | Para evitar esse problemas as unidades de medidas devem '''sempre ter nomes diferentes mesmo que em dimensões distintas'''. Embora não conheça nenhuma unidade de medida que tenha o mesmo o nome e represente coisas diferentes, é bom que o DEV tenha ciência dessa situação. | ||
}} | }} |
Edição das 13h48min de 23 de novembro de 2021
O MeasureRuler é, pela própria tradução, uma régua de medidas. Essa régua de medidas tem a intenção de oferecer aos sistemas a facilidade para converter unidades de medidas da mesma dimensão, ou mesmo entre dimensões diferentes quando estabelecida a regra de conversão.
Definições:
- Dimensão - tipo de medida utiliza, como "Comprimento", "Área", "Volume", "Massa (Peso)", etc. Embora estas hoje sejam as dimensões que o BIS suporta, nada impede de se criar dimensões mais complexas como "Energia", "Luminosidade", "Torque", e assim por diante.
- Unidade de Medida - Unidade de medida utilizada para medir a Dimensão desejada. Por exemplo, comprimento pode ser medido em "Metros", "Centimetros", "Pés", "Polegadas", etc. "Massa" pode ser medida em "Arrobas", "Kilos", "Pounds", etc.
A classe MeasureRuler apresenta os métodos para conversão de forma estática. Para mais informações consulte o JavaDoc da classe.
Unidades Personalizadas
O MeasureRuler deve em breve ter um sistema para definição de unidades personalizadas e consequentemente uma regra para conversão. Por exemplo, deve ser possível criar uma unidade de medida batizada pelo usuário de "Bandeija", ou de "Palete" ou ainda "Jigawbaca" que podem representar X unidades, ou X Kilos conforme sua vontade. E a partir dessa definição o MeasureRuler ser capaz de realizar suas conversões.
MeasureUnit
O MeasureRuler suporta várias dimensões de medidas. Cada dimensão pode conter várias unidades de medidas. A dimensão é definida pela enumeration MeasureDimension. Já as unidades de cada unidade de medida são definidas pela sua própria enumeration que estendem a interface MeasureUnit. Por exemplo:
- Volume - VolumeUnit
- Comprimento - LengthUnit
- Área - AreaUnit
- Massa (peso) - WeightUnit
- Unidades - UnitUnit
Interface MeasureUnit
Cada dimensão tem suas unidades de medidas em enumerations diferentes. Assim, quando precisamos representar qualquer uma das unidades de medida utilizamos essa interface. Um exemplo: ao cadastrar um produto no sistema, a "unidade básica de estoque" dele pode ser tanto Unidades, quando Metros, Kilos, Metros Quadrados, etc.. Assim, a melhor maneira de definir este atributo é através desta interface.
A interface MeasureUnit apresenta métodos como getDimension(), que retorna a enumeration de MeasureDimension para indicar que Dimensão de Medida esta Unidade pertence.
Persistência da Interface MeasureUnit - MeasureUnitDAOConverter
Por tratar-se de uma enumeration, o padrão do FW é que no banco seja um campo do tipo varchar(50) (O limite recomendado de enums no BIS é de 50 chars). Mas uma vez que a MeasureUnit é uma interface, o BISDAO não sabe como proceder para persisti-la e reconstruir o VO com os dados do banco. Para isso temos de utilizar uma BISDAOConverter. E para simplificar o MeasureRuler já oferece uma implementação pronta para isso a MeasureUnitDAOConverter.
Para definir um atributo no VO que seja do tipo MeasureUnit devemos ter algo como:
![]() |
Exemplos de Declaração
@BISDAOConverter(converterClass = MeasureUnitDAOConverter.class)
@BISMetaGenericField(caption = "Unidade de Medida", required = true)
private MeasureUnit measureUnit = null;
|
Sempre que o BISDAO lêr a String no banco de dados que representa a unidade de medida, o Converter conseguirá descobrir de qual enumeration devemos realizar o "valueOf(...)".
Note que o método utilizado dentro do converter é o
MeasureRuler.valueOf(...);
, sempre que for necessário desserializar da String para uma das unidades de medida, esse método fará o trabalho.
![]() |
|