

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Patrones de acceso
<a name="access-patterns"></a>

Como se mencionó anteriormente en esta guía, puede elegir entre tres patrones de acceso para realizar operaciones de creación, lectura, actualización y eliminación (CRUD) en las tablas de DynamoDB: interfaz de persistencia de objetos, interfaces de documentos e interfaz API de bajo nivel. En las siguientes secciones se describe cada interfaz. Para nuestro caso de uso de SQL Server a DynamoDB, elegimos la interfaz de persistencia de objetos por su simplicidad, legibilidad y facilidad de mantenimiento.

## Interfaz de persistencia de objetos
<a name="object-persistence-interface"></a>

La interfaz de persistencia de objetos proporciona un mecanismo de acceso abstracto de alto nivel para realizar operaciones CRUD en elementos de DynamoDB mediante modelos de.NET, similares a las entidades de Entity Framework. Las propiedades de la interfaz se asignan a los atributos de los elementos de DynamoDB. El AWS SDK para .NET admite atributos de propiedades personalizados en este modelo para personalizar la serialización y deserialización de propiedades individuales, gestionar valores nulos y realizar conversiones de tipos.

Ejemplo de modelo utilizado en la aplicación:

```
[DynamoDBTable(“AppLibrary")]
public class ProdApp
{
      [DynamoDBHashKey]
      public string PK { get; set; }     //Partition key
 
      [DynamoDBRangeKey]
      public string SK { get; set; }     //Sort key  
 
      [DynamoDBGlobalSecondaryIndexRangeKey(“Version-index")]
      [DynamoDBProperty]
      public int Version { get; set; }    
       . . .
      [DynamoDBProperty]
      public Int64 TTL { get; set; }
}
```

Acceso al artículo:

```
var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials);
var _context = new DynamoDBContext(_dynamoDbClient);
 
public ProdApp GetProdAppById (Guid id, int version)
{
     var pk = $”{id}-{version}”;
     return _context.Load<ProdApp>(pk, ItemType.ProductionApplication);
}
```

Para obtener más información, consulte [Interfaz de persistencia de objetos](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.SDKs.Interfaces.Mapper.html) en la documentación de DynamoDB.

## Interfaz de documentos
<a name="document-interface"></a>

El modelo de interfaces de documentos proporciona acceso basado en documentos (similar al que `XMLDocument` en .NET) a un elemento de DynamoDB. Este modelo proporciona una interfaz de programación de nivel superior, pero traduce sus llamadas a un nivel inferior para realizar la operación APIs . 

```
var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials);
var _table = Table.LoadTable(_dynamoDbClient, “AppLibrary”);
 
public ProdApp GetProdAppById (Guid id, int version)
{
      var pk = $”{id}-{version}”;
     var doc = _table.GetItem(pk, ItemType.ProductionApplication);
      var app = new ProdApp {
          PK = doc[“PK”],
          SK = doc[“SK”],
          Version = doc[“Version”],
          . . .
      };
      return app;
 }
```

Para obtener más información, consulte [Interfaces de documentos](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.SDKs.Interfaces.Document.html) en la documentación de DynamoDB.

## API de bajo nivel
<a name="low-level-api"></a>

El AWS SDK para DynamoDB también proporciona acceso a la API de bajo nivel para realizar operaciones CRUD mediante `PutItem` los `GetItem` métodos,, y. `UpdateItem` `DeleteItem` Este modelo proporciona un control total sobre la asignación de atributos y las conversiones de tipos. La respuesta a estas llamadas es un diccionario de pares clave-valor. 

```
[DynamoDBTable(“AppLibrary")]
public class ProdApp
{
        [DynamoDBHashKey]
        public string PK { get; set; }     //Partition key
 
        [DynamoDBRangeKey]
         public string SK { get; set; }     //Sort key  
 
        [DynamoDBGlobalSecondaryIndexRangeKey(“Version-index")]
        [DynamoDBProperty]
        public int Version { get; set; }     
              . . . 
        [DynamoDBProperty]
        public ProdConfig Config  { get; set; }
}
 
var _dynamoDbClient = new AmazonDynamoDBClient(AWSCredentials);
                                           
public ProdApp GetProdAppById (Guid id, int version)
{
    var pk = $”{id}-{version}”;
    var resp = _dynamoDbClient.Query(queryRequest);
    var item = resp.Items[0]; 
    var app = new ProdApp {
         PK = item[“PK”].S,
         SK = item[“SK”].S,
         Version = Convert.ToInt32(item[“Version”].S),
         . . .       
         Config = new ProdConfig {
               Name = item[“Config”].M[“Name”].S,
               Id = Conver.ToInt32(item[“Config”].M[“Id”].S)
         }
    };    
    return app;
 }
```

Para obtener más información, consulte [Interfaces de bajo nivel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.SDKs.Interfaces.LowLevel.html) en la documentación de DynamoDB.