C# 为只读视图设计对象
在我当前的项目中,我有一个由其他自定义对象组成的类公司C# 为只读视图设计对象,c#,oop,C#,Oop,在我当前的项目中,我有一个由其他自定义对象组成的类公司 class Company { Address mailingAddress; Address physicalAddress; MailingTypes mailinTypes; ... } 当用户搜索公司时,用户界面必须显示公司名称、地址和邮件类型。我可以在数据集或数据读取器中获取数据。我的问题是,我是否必须在迭代结果时创建Company和child对象,还是应该创建一个新的Company
class Company {
Address mailingAddress;
Address physicalAddress;
MailingTypes mailinTypes;
...
}
当用户搜索公司时,用户界面必须显示公司名称、地址和邮件类型。我可以在数据集或数据读取器中获取数据。我的问题是,我是否必须在迭代结果时创建Company和child对象,还是应该创建一个新的CompanyView结构,该结构只包含用于显示的字符串,如下所示?这是一个更好的方法
class CompanyView {
string MailingAddress;
string physicalAddress;
....
}
谢谢,
全金属这实际上取决于结果的下游用途。在某些情况下,创建一个仅用于显示的字符串的新对象可能会有所帮助,尤其是在需要显示大量字符串的情况下
但同时,另一种方法也会起作用。覆盖Address类上的ToString方法,您将不需要创建新的CompanyView。我正在处理一个具有类似功能的项目。我使用的是类似于:
class Company {
Address _mailingAddress;
[DisplayName("Mailing Address")]
public string MailingAddress {
get {
if (_mailingAddress==null) {
return null;
}
return _mailingAddress.GetAdressString();
}
}
}
类
Address
应具有getAddressString()
方法,该方法应以适当的形式为您提取地址数据。我希望我的客户端代码如下所示:
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);} }
}
我的后端代码如下:
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);} }
}
这就是我最初的想法。但要填充company对象,我必须创建不必要的Address对象。这是最好的做法。我们分页,最大页面大小是50。这么多东西。因此,我将继续使用当前的公司对象。谢谢你的意见。谢谢你的回答。Address类有一个类似于GetAddressString()的方法,我将使用它。Np,我使用这样的方法,并将List(我是您的案例)直接绑定到datagrid。