只是想问一下在 .NET Framewok (C#) 中使用具有 300 多个属性的对象的缺点(我的意思是内存或响应时间)。
我正在考虑将不同类中的属性分开,但我的问题是属性之间没有很大的关系。
我不会做任何复杂的计算,我只会填充 instatiaded 对象的属性并将他发送到另一个程序,该程序将把他送回去。
你觉得怎么样
EDIT
在运行我的程序时,我将只有一个对象。
只是想问一下在 .NET Framewok (C#) 中使用具有 300 多个属性的对象的缺点(我的意思是内存或响应时间)。
我正在考虑将不同类中的属性分开,但我的问题是属性之间没有很大的关系。
我不会做任何复杂的计算,我只会填充 instatiaded 对象的属性并将他发送到另一个程序,该程序将把他送回去。
你觉得怎么样
EDIT
在运行我的程序时,我将只有一个对象。
最大的缺点:可读性。
具有 300 个属性的类(我假设您的意思是属性,因为 .NET 属性具有特定的技术含义)太大而无法阅读和理解。如果,如您所说,您应该the attributes don't have a big relation between them
寻找如何将它们分解为更小的相关项目类别。
您的描述:
我不打算做任何复杂的计算,我只会填充 instatiaded 对象的属性并将他发送到另一个程序,该程序将把他送回去。
这似乎表明需要在系统之间传递一个 DTO(数据传输对象) - 我再次认为,您应该考虑将对象分解为几个(因此,如果相关项目发生变化,您不必更改整个界面)。
不,我认为不会。Infragistics ultragrid 拥有大约(我的近似)不到一千种属性和方法。并且运行正常。现在,如果您将其中的 10 个控件放在您的程序中会怎样。也没什么区别。我认为可以安全地假设您可以添加任意数量的内容,因为如果您至少有未使用的 1GB 内存空间,
这只是我的近似值,您也可以拥有自己的:1 个属性,平均 250 个字节(1 个字符 = 2 个字节)所以,
1 073 741 824/250 字节 = 4 294 967.3 属性
此外,您还拥有 HD 的虚拟内存作为备份。
一个词:抽象
如果你有一个包含 300 个属性的大类,那么在整个项目中你只有一个大的抽象抽象。
您可能是唯一使用它的人,但可能几年后,当您必须返回并更改某些内容时,您可能会对您所做的事情感到困惑。
下面的这个类很好,但它可能会遗漏一些功能。
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public string Social { get; private set; }
}
所有这些属性都可以在函数式程序中使用,但您可以为自己提供更多功能。
下面的示例被重构为将 Social 抽象为它自己的类SSN
:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public char Gender { get; set; }
public SSN Social { get; private set; }
}
public class SSN
{
public const int SSN_LENGTH = 9;
public string FirstThree { get; set; }
public string MiddleTwo { get; set; }
public string LastFour { get; set; }
public SSN(string ssn)
{
FirstThree = ssn.Substring(0, 3);
MiddleTwo = ssn.Substring(2, 2);
LastFour = ssn.Substring(5, 4);
}
public string ToString(bool format = false)
{
string formatDelimiter = "";
if (format)
{
formatDelimiter = "-";
}
return FirstThree + formatDelimiter + MiddleTwo + formatDelimiter + LastFour;
}
}
通过将 Social 抽象为一个SSN
类,我现在可以对社会安全号码进行更多控制并添加功能。当我通过他们社交的最后四个人寻找一个人时,我可以轻松地使用以下代码:
string lastFour = "0000";
List<Person> Persons = new List<Person>();
Person foundPerson = Persons.Where(x => x.Social.LastFour == lastFour).First();
这只是一个小例子,它可以扩展到更复杂的部分。这将为系统提供更好的功能,并且也更容易理解。