gpt4 book ai didi

.net - 什么被认为是多个相似类的良好设计

转载 作者:行者123 更新时间:2023-12-01 23:34:54 26 4
gpt4 key购买 nike

我正在构建一个应用程序,该应用程序需要多个具有相似属性(例如:学生、教师、联系人、用户)的(Person 的)子类。属性会有相当大的重叠,但也会有很多差异。例如,一个人可以是学生、联系人和用户。这是一个示例(为清楚起见而限制):

Person
FirstName
LastName
DOB
CurrentAge

Student <- Person
StudentId
Average
Email
Phone

Contact <- Person
Email
Phone
Address

User <- Person
Email
UserName
DOB
CurrentAge

我想避免多次编写代码 - 例如:电子邮件验证代码、计算年龄所需的代码等。此外,我们可能不得不在以后添加具有相似重叠和差异的其他类。

处理此问题的良好设计是什么,或者涵盖此问题的设计模式(如果有的话)是什么?

从我对设计模式的基本理解来看,Decorator 似乎不对 b/c 我没有添加行为。 Composite 似乎不正确 b/c 它不是递归的。我也明白,这可能没有理想的模式,但是,这似乎是一个非常普遍的要求。

如果重要的话,这将主要用于ASP.NET/C#/VB.NET。

其他 SO 问题有两个相似类/对象(通常是子类)的答案,但我找不到任意数量的相似类的答案。

也欢迎任何有关相关数据库设计的建议。

最佳答案

您想使用组合来组合多个不同类的功能。您真正需要的是如何设计对象层次结构,以便您可以根据需要定义不同级别的功能。最好和最简单的方法是使用 Composition 来定义功能。

例如,在您的示例中,Person 不需要电子邮件地址;但是,Contact 可以,User 可以;它们都继承自 Person。处理这个问题的方法是有一个 Email 类,然后你的 ContactUser 类可以有;该类可以管理验证等。如果您真的希望将您的Email 附加到Person,您可以使用PersonWithEmail 类(请选择一个更好的名字!)它继承自Person,并将继承的PersonEmail类组合在一起;这样,任何继承自 PersonWithEmail 的类都将获得 Person 功能和 Email 功能。然而,这种方法的问题是您直接在继承层次结构中定义组合;这可能不是所希望的。直接组合方法更简单。

关于.net - 什么被认为是多个相似类的良好设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654087/

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