vendredi 17 février 2023

What is the design pattern to use for extending a base class with additional properties?

I have "business entities" and their counterpart for saving them to Azure Storage Table, which requires a few additional properties.

// MyData is the business entity with a few properties
public record MyData_AzureTable : MyData, ITableEntity
{
    // Required properties for storing data to Azure Storage Table
    public string PartitionKey { get; set; } = "";
    public string RowKey { get; set; } = "";
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; } = new ETag();
}

I am getting tired of having to duplicate each business entity with its AzureTable counterpart but I can't find the correct pattern to use. Something like that, except it's illegal to inherit from a type parameter.

public record AzureTable<T> : T, ITableEntity
{
    public string PartitionKey { get; set; } = "";
    public string RowKey { get; set; } = "";
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; } = new ETag();
}

What pattern should be used for adding properties to a base class?

The object saved to Azure Table Storage needs to be "flat" (tabular data as property values, no hierarchical data)

Aucun commentaire:

Enregistrer un commentaire