2009-08-07 21 views
0

J'essaye de construire un modèle d'élixir dans lequel j'ai une classe avec une liste (de taille variable) de tuples.Elixir Entité avec une liste de tuples dedans. ex. Recette de cuisine avec liste de (ingrediant, quantité) tuple

Un exemple serait une recette

alors que je peux faire quelque chose comme ceci:

class Recipe(Entity): 
    ingrediants = OneToMany('IngrediantList') 
    cooking_time = Field(Integer) 
    ... 

class IngrediantList(Entity): 
    ingrediant = ManyToOne('Ingrediant') 
    quantity = Field(Number(3,2)) 

class Ingrediant(Entity): 
    name = Field(String(30)) 
    ... 

Il a un certain nombre de lacunes. Pour ma part, je n'aime pas créer une entité pour une liste d'ingrédients dont je n'ai aucune signification pour le domaine; se moque de l'abstraction. Une autre est qu'une requête comme les éléments que je peux préparer avec cet ingrédient serait vraiment désordonnée et probablement inefficace sans ajouter plus de relations et/ou de champs au modèle, ce qui rendrait désordonné à son tour.

Un autre exemple serait un bordereau de dépôt bancaire avec la liste des coupures et la quantité.

Quelle est la meilleure façon de concevoir un tel modèle?

Répondre

0

C'est la manière correcte de modéliser des objets composites. La seule chose que je changerais est le nom de la classe IngredientList. Quelque chose comme RecipeEntry ou IngredientQuantity serait plus approprié. L'appeler un tuple essaye juste d'éviter le besoin de nommer le fait qu'une recette a besoin d'une quantité d'ingrédient.

Si pour la majeure partie du code, vous ne souhaitez pas prendre en compte les détails de l'association, vous pouvez utiliser l'extension sqlalchemy associationproxy pour créer un attribut proxy afin de masquer les détails.

Questions connexes