2010-08-01 5 views

Répondre

6

Vous pouvez ajouter une propriété Map à votre classe de domaine et y stocker des données arbitraires. C'est plutôt limité cependant. Il va générer une table avec des clés et des valeurs varchar (255), vous devez donc gérer vous-même les conversions de type, par ex.

class Thing { 
    String name 
    Map extraProperties = [:] 
} 

int age = 123 
def thing = new Thing(name: 'whatever') 
thing.extraProperties.age = age.toString() 
thing.save() 

... 

def thing = Thing.get(thingId) 
int age = thing.extraProperties.age.toInteger() 

Voir la section "5.2.4 Ensembles, listes et cartes" à http://grails.org/doc/latest/ pour les brèves docs en ligne.

+0

Aucun type de sécurité ou d'abstraction là-bas. – duffymo

+0

donc si je veux le faire dynamique - je vais peut-être besoin carte supplémentaire pour stocker le type ou de mettre sur la carte une classe avec des propriétés qui décrivent le type: Classe extraProp {int typeCode Valeur chaîne } –

+1

@duffymo Type de sécurité et d'abstraction ne sont pas mentionnés dans les exigences. –

0

On dirait que vous voulez que votre application soit une clé réglable en continu que les utilisateurs peuvent modifier à volonté. Est-ce juste?

Je ne pense pas que ce soit possible ou souhaitable. Pensez à ce qui se passe lorsque vous ajoutez un attribut à un objet de domaine existant dans Grails. L'attribut est ajouté au mappage ORM, ce qui signifie que les tables doivent être modifiées. L'interface utilisateur a une autre zone de texte ajoutée pour la saisie de données; la page de liste a une autre colonne ajoutée à sa table.

Il se passe beaucoup de choses lorsque vous ajoutez un attribut. Comment allez-vous gérer plusieurs utilisateurs modifiant l'application en même temps? Que se passe-t-il lorsqu'un utilisateur modifie une table alors qu'une autre accède à l'ancienne version?

Vous demandez trop. Je ne pense pas que ce soit une exigence raisonnable. Le sweet spot de Grails est un développement rapide d'applications CRUD basées sur le web. Je ne pense pas que cela inclut la modification par les utilisateurs à l'exécution.

+0

cette exigence existe et est implémentée dans de nombreux systèmes. donc je ne pense pas que je demande trop. Peut-être que la mise en œuvre est complexe mais c'est faisable - je l'ai fait il y a quelques années dans l'application JEE et je serai heureux d'obtenir de l'aide et des idées de développeurs qui l'ont fait dans Grails. –

+0

D'accord avec l'affiche alors que c'est techniquement duable Grails est la mauvaise technologie pour cela. Vous pourriez écrire stackoverflow.com dans l'assemblage mais ce ne serait pas une bonne idée si vous tenez compte de tous les efforts supplémentaires. – Jared

+0

Pas très constructif – Thermech