[ 
https://issues.apache.org/jira/browse/AVRO-1469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13914946#comment-13914946
 ] 

Ryan Blue commented on AVRO-1469:
---------------------------------

One solution is related to AVRO-1468, proposed by Doug:

bq. One might build a data model with something like,
bq. dataModel = new GenericData().setRecordModel(new ReflectRecordModel());
bq. We might be lazy about abstracting models. We might start by adding just 
RecordModel and see if that, combined with the existing hierarchy, satisfies 
most needs. When someone needs a bundle not possible with that, then we can 
incrementally add models for more types. So we'd start by implementing 
GenericRecordModel, SpecificRecordModel, ReflectRecordModel and change 
GenericData to delegate all record-related work to its RecordModel field.

> Support interchangeable object models
> -------------------------------------
>
>                 Key: AVRO-1469
>                 URL: https://issues.apache.org/jira/browse/AVRO-1469
>             Project: Avro
>          Issue Type: New Feature
>          Components: java
>    Affects Versions: 1.7.6
>            Reporter: Ryan Blue
>
> The current way to use a different in-memory representation is to subclass 
> one of the data modules, like {{GenericData}}, and override the relevant 
> methods. This approach has a couple of drawbacks:
> 1. Because Reflect inherits from Generic, both must be subclassed and altered 
> to preserve the choice between generic records and POJOs. This may have 
> nothing to do with the object classes being changed (e.g., Map 
> implementation).
> 2. Replacing the data class tends to also require replacing the DatumReader 
> and DatumWriter implementation.
> From discussion on a related Kite issue, Doug writes:
> bq. It's hard to know up front what bundles of functionality folks will need. 
> We might add a separate interface that determines the representation of each 
> type (records, maps, arrays, enums, strings, bytes, fixed, unions, numbers, 
> etc.), then have generic/specific/reflect implementations for records, 
> collection/array implementations for array, Utf8/String for string, 
> tagged/untagged unions, etc. Currently we have one big interface 
> (GenericData) for all of these, with a hierarchy of implementations that 
> provide a few common combinations, but far fewer than are logically possible.
> The use case I'd like to focus on is interchanging both the POJO/record model 
> and the other objects independently. I think this follows from the 
> distinction between Generic and Reflect and is a good starting point.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to