gpt4 book ai didi

c# - 好的类设计实例

转载 作者:IT王子 更新时间:2023-10-29 04:21:45 26 4
gpt4 key购买 nike

我正在尝试找到设计一个类的最佳方法,该类的属性持久保存在数据库中。让我们来看一个Person 的基本示例。要创建一个新人并将其放入数据库,我希望 DateOfBirth 属性是可选的(即在数据库中为 NULLable)。

这是我的示例代码:

namespace BusinessLayer
{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}

我不确定这些字段是否应该公开。我应该这样做吗:

class Program
{
static void Main(string[] args)
{
Person person1 = new Person("Kate","Middleton",null);
}
}

或者像这样:

class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
person1.FirstName = "Kate";
person1.LastName = "Middleton";
}
}

我还想知道我应该如何处理类的可选属性。填充字段后,我该如何将它们保存到数据库中?我有一个 DatabaseComponenet 类来保存信息。存入数据库时​​optional如何处理?

那么,我会做这样的事情吗:

public int Save()
{
int personId;
personId = DatabaseComponent.InsertPerson(FirstName, LastName, DateOfBirth);
return personId;
}

感谢您的帮助!一些关于良好类设计的有用 URL 也将不胜感激。

最佳答案

首先,我将两个不同的公共(public)构造函数放入 Person:

namespace BusinessLayer
{
class Person
{
public Person(string firstName, string lastName): this(firstName, lastName, DateTime.Now)
{}

public Person(string firstName, string lastName, DateTime birthDate)
{
FirstName = firstName;
LastName = lastName;
DateOfBirth = birthDate;
}

public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
}

这样你就可以同时写

var p = new Person("Marilyin", "Manson");
var p2 = new Person("Alice", "Cooper", new DateTime(...));

var p = new Person { FirstName="Marilyn", LastName="Manson" };

我不明白为什么你应该只使用一种形式。

至于 DatabaseComponent,我强烈建议编写一个允许您保存 Person 而不是隐式声明的签名的方法。

那是因为,如果有一天更改了 Person 的定义方式,您可能必须更改调用 Save() 方法的每个点的代码。通过仅保存一个人,您只需更改 Save() 实现。

你不打算顺便使用 ORM 吗?

关于c# - 好的类设计实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com