在我目前的项目中,我有一个由其他自定义对象组成的类公司。
class Company {
Address mailingAddress;
Address physicalAddress;
MailingTypes mailinTypes;
...
}
当用户搜索公司时,UI必须显示,名称,地址和邮件类型。我可以在DataSet或datareader中获取数据。我的问题是,我是否必须在迭代结果时创建公司和子对象,还是应该创建一个新的CompanyView Struct,它只包含用于显示的字符串,如下所示?哪种方法更好。
class CompanyView {
string MailingAddress;
string physicalAddress;
....
}
谢谢, 全金属
答案 0 :(得分:1)
这实际上取决于结果的下游用法。在某些情况下,创建一个仅用于显示的字符串的新对象会很有帮助,特别是如果要显示大量的对象。
但同时另一种方法也可以。
答案 1 :(得分:0)
覆盖Address类的ToString方法,您不需要创建新的CompanyView。
答案 2 :(得分:0)
我正在研究一个具有类似功能的项目。我使用的是:
class Company {
Address _mailingAddress;
[DisplayName("Mailing Address")]
public string MailingAddress {
get {
if (_mailingAddress==null) {
return null;
}
return _mailingAddress.GetAdressString();
}
}
}
类Address
应该有GetAdressString()
方法,该方法应该以适当的形式为您提取地址数据。
答案 3 :(得分:0)
我希望我的客户端代码如下所示:
IAddress address = AddressFactory.MakeAddress("76 Main St", "3333", "CloseToNowhere");
Company c = Company.Make(address);
Console.WriteLine(c.MailingAddress.FullAddress);
我的后端代码如下:
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);} }
}