使用对象列表在项目层之间传递(C#)

使用对象列表在项目层之间传递(C#),c#,oop,C#,Oop,在一个C#(visual Studio 2010)项目中,我有一个具有大量属性的类,我用数据填充该类的对象,并将其添加到列表对象中,以将其传递给显示项目列表(类似于搜索结果)。 我的问题是,我不需要类的所有属性来显示上面的列表,所以我是否需要创建另一个只包含必需字段的类来显示(结果)列表?根据OOP的概念,它正确吗 < P>我想是的,它被称为< P>我想是的,它被称为 < P>你可以考虑使用一个像从N个属性的类映射到具有M个属性数的类的解决方案。它依赖于一些常规信息(相同/相似的名称),但也可以

在一个C#(visual Studio 2010)项目中,我有一个具有大量属性的类,我用数据填充该类的对象,并将其添加到列表对象中,以将其传递给显示项目列表(类似于搜索结果)。
我的问题是,我不需要类的所有属性来显示上面的列表,所以我是否需要创建另一个只包含必需字段的类来显示(结果)列表?根据OOP的概念,它正确吗

< P>我想是的,它被称为

< P>我想是的,它被称为

< P>你可以考虑使用一个像从N个属性的类映射到具有M个属性数的类的解决方案。它依赖于一些常规信息(相同/相似的名称),但也可以调整


这是从数据库中提取模型数据并将其转换为可在网页视图中显示的内容的一种非常标准的方法。我构建了一个“viewmodel”,它只包含我想要显示的内容,通常是字段的子集,然后在字段之间进行映射。像AutoAppER之类的东西很容易做到这一点。

< P>你可以考虑使用一个像从N个属性的类映射到具有M个属性的另一个类的解决方案。它依赖于一些常规信息(相同/相似的名称),但也可以调整


这是从数据库中提取模型数据并将其转换为可在网页视图中显示的内容的一种非常标准的方法。我构建了一个“viewmodel”,它只包含我想要显示的内容,通常是字段的子集,然后在字段之间进行映射。像automapper这样的东西使它非常容易实现。

您的properties对象可以根据程序的不同部分的请求实现多个接口

如果定义这些接口:

public interface IBasicInfo
{
    string Name { get; }
    string Id { get; }
}

internal interface IFullInfo : IBasicInfo
{
    string Address { get; }
}

internal interface IInternalStuff
{
    Stuff Data { get; }
}
您的properties类实现它们的方式如下:

internal class Properties : IFullInfo, IInternalStuff
{
    // some basic implementation
}
public void Display(IBasicInfo info)
{
   ...
}
然后,您可以将该类传递到应用程序的其他部分,该部分具有如下方法:

internal class Properties : IFullInfo, IInternalStuff
{
    // some basic implementation
}
public void Display(IBasicInfo info)
{
   ...
}
调用代码将只看到属于
IBasicInfo
的属性。请注意,只有
IBasicInfo
需要是公共的,甚至
Properties
类也是内部的,以确保没有调用代码可以回溯到实际的实现并弄乱它


或者,如果您的调用代码包含完全不同的接口,那么将它们转换为数据传输对象,甚至修改它们的内容以符合调用方的期望(适配器模式)是完全合理的。有一些工具可以自动执行此任务(例如)。

您的属性对象可以根据程序的不同部分的要求实现多个接口

如果定义这些接口:

public interface IBasicInfo
{
    string Name { get; }
    string Id { get; }
}

internal interface IFullInfo : IBasicInfo
{
    string Address { get; }
}

internal interface IInternalStuff
{
    Stuff Data { get; }
}
您的properties类实现它们的方式如下:

internal class Properties : IFullInfo, IInternalStuff
{
    // some basic implementation
}
public void Display(IBasicInfo info)
{
   ...
}
然后,您可以将该类传递到应用程序的其他部分,该部分具有如下方法:

internal class Properties : IFullInfo, IInternalStuff
{
    // some basic implementation
}
public void Display(IBasicInfo info)
{
   ...
}
调用代码将只看到属于
IBasicInfo
的属性。请注意,只有
IBasicInfo
需要是公共的,甚至
Properties
类也是内部的,以确保没有调用代码可以回溯到实际的实现并弄乱它


或者,如果您的调用代码包含完全不同的接口,那么将它们转换为数据传输对象,甚至修改它们的内容以符合调用方的期望(适配器模式)是完全合理的。有一些工具可以自动执行此任务(,例如)。

因为您有一个引用类型(类),所以传递原始对象而不是包含数据子集的新对象应该不会太昂贵


如果您想保护对象不被列表的接收者操纵,那么您可以为类定义一个只读接口,并以此方式传递它。

因为您有一个引用类型(一个类),传递原始对象而不是包含数据子集的新对象应该不会太昂贵


如果要保护对象不受列表接收者的操纵,则可以为类定义一个只读接口,并将其作为只读接口传递。

在层之间移动数据是否昂贵?在层之间移动数据是否昂贵?