2010-09-12 24 views
1

Considérons cet exemple:Containership Question

namespace ValueObjects 
{ 
    public class User 
    { 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    } 

    public class Company 
    { 
    public string CompanyCode { get; set; } 
    } 
} 

Maintenant, je veux la classe utilisateur d'avoir une propriété CompanyCode .. la première solution évidente est tout simplement mettre une propriété CompanyCode sur la classe utilisateur

public class User 
{ 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    public string CompanyCode { get; set; } 
} 

Maintenant le problème ici est redondant car il existe déjà une propriété CompanyCode à la classe Company, est-il possible que l'utilisateur puisse utiliser la propriété CompanyCode de la société SANS hériter de la classe Company (problème ici est C# doesnt allo w héritage multiple des classes) ou en utilisant une interface ICompany (mais l'interface est une douleur dans les objets de valeur). Je pensais à juste contenir la classe Company à la classe User mais je vais utiliser seulement la propriété CompanyCode de celui-ci.

quelque chose comme ça ..

public class User 
    { 
    public string UserCode { get; set; } 
    public string UserName { get; set; } 
    private Company company; 
    public string CompanyCode { get { company.CompanyCode } set {company.CompanyCode } 

    } 

mais, il n'y a pas de différence pour simplement ajouter une propriété de chaîne CompanyCode .. besoin de vos gars de conseils. Merci d'avance ..

Répondre

2

Votre solution est valide. Vous voulez le confinement; une relation «a un» et non une relation «est-un» (héritage). Une autre option serait un

public Company UserCompany; 

qui laisserait l'accès aux objets utilisateur autres propriétés publiques sur l'objet Société si elles sont ajoutées à l'avenir.

+0

Le problème est, quand je fais la classe Company une propriété de l'utilisateur - public Company UserCompany {get; ensemble; } - et placez l'utilisateur dans une collection (ex: Collection utilisateur) et liez-le à un Gridview. Le Boundfield de Gridview ne vous laissera pas accéder à la propriété de la classe contenue ... – CSharpNoob

+0

@CsharpNoob en effet, objectdatasource/asp.net simple liaison de données ne peut pas marcher à travers les classements complexes. Jetez un oeil ici: http://www.codeproject.com/KB/database/CustomBindableObject.aspx –

+0

Y at-il une solution à ce sujet? J'utilise DTO et son méchant, pour voir trop de propriété CompanyCode dans mes objets de valeur .. – CSharpNoob