2010-11-19 5 views
0

Dans mon projet actuel, j'ai une société de classe composée d'autres objets personnalisés. Lorsque les utilisateurs recherchent des sociétés, l'interface utilisateur doit afficher, le nom, l'adresse et les types de publipostage. Je peux obtenir les données dans un DataSet ou dans un lecteur de données. Ma question est la suivante: Dois-je créer des objets Société et Enfant lorsque je répète les résultats ou dois-je créer une nouvelle structure CompanyView qui contient uniquement des chaînes utilisées pour afficher les résultats ci-dessous? Quelle est la meilleure approche?Conception d'objets pour la vue en lecture seule

class CompanyView { 
     string MailingAddress; 
     string physicalAddress; 
     .... 
    } 

Merci, Full Metal

Répondre

1

Cela dépend vraiment des usages en aval des résultats. Dans certains cas, il peut être utile de créer un nouvel objet qui n'est que des chaînes à afficher uniquement, en particulier si vous en avez un grand nombre à afficher.

Mais en même temps l'autre méthode fonctionnerait aussi bien. Substituez la méthode ToString de votre classe Address et vous n'aurez pas besoin de créer une nouvelle CompanyView.

+0

Nous paginez et la pageSize maximale est de 50. Donc, pas beaucoup d'objets. Donc, je continuerais à utiliser mon objet Company actuel tel quel. Merci pour votre participation. –

0

+0

C'est ce que ma pensée initiale était. Mais pour remplir l'objet de la société, je devrais créer des objets Adresse inutiles. Est-ce la meilleure pratique? –

0

Je ne fais que travailler sur un projet qui a des fonctionnalités similaires. J'utilise quelque chose comme:

class Company { 
    Address _mailingAddress; 
    [DisplayName("Mailing Address")] 
    public string MailingAddress { 
     get { 
      if (_mailingAddress==null) { 
       return null; 
      } 
      return _mailingAddress.GetAdressString(); 
     } 
    } 
} 

classe Address devrait avoir GetAdressString() méthode qui devrait extraire les données d'adresse sous la forme appropriée pour vous.

+0

Merci pour votre réponse. La classe Address a une méthode similaire à GetAddressString() et je l'utiliserai. –

+0

Np, j'utilise une telle méthode et je lie la liste (i votre cas) directement à datagrid. –

0

Je voudrais que mon code client pour ressembler à ceci:

IAddress address = AddressFactory.MakeAddress("76 Main St", "3333", "CloseToNowhere"); 
Company c = Company.Make(address); 
Console.WriteLine(c.MailingAddress.FullAddress); 

Et mon code arrière comme ceci:

public interface IAddress 
{ 
    string Steet { get; } 
    string ZipCode { get; } 
    string City { get; } 
} 

public interface IMailingAddress : IAddress 
{ 
    string FullAddress { get; } 
} 

public static class AddressFactory 
{ 
    private class Address : IAddress 
    { 
     public string Steet { get; set; } 
     public string ZipCode { get; set; } 
     public string City { get; set; } 
    } 

    private class MailingAddress : Address, IMailingAddress 
    { 
     public string FullAddress 
      { get { return string.Format("{0} {1} {2}", Steet, ZipCode, City); } } 
    } 

    static public IAddress MakeAddress(string street, string zip, string city) 
     { return new Address() { Steet = street, ZipCode = zip, City = city }; } 

    static public IMailingAddress MakeMailingAddress(IAddress address) 
     { return new MailingAddress() { Steet = address.Steet, ZipCode = address.ZipCode, City = address.City }; } 
} 


public class Company 
{ 
    private IAddress _address; 

    private Company(IAddress address) { _address = address; } 

    static public Company Make(IAddress address) 
     { return new Company(address); } 

    public IAddress Address 
     { get { return _address; } } 

    public IMailingAddress MailingAddress 
     { get{return AddressFactory.MakeMailingAddress(_address);} } 

} 
Questions connexes