gpt4 book ai didi

c# - 强制不同对象之间的数据完整性

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:37 25 4
gpt4 key购买 nike

我正在通过开发 C# 音乐管理软件来学习 OOP。到目前为止,我已经按照这个类图所示布置了不同类和对象的交互 http://img811.imageshack.us/img811/7624/classdiagramh.png

然而,我对如何使我的设计可靠感到非常困惑,因为我发现了无数种可以如何完成事情的可能性,但我不想以糟糕的设计告终。我遇到的主要问题是确保我在不同对象之间强制执行数据完整性(据我了解,我假设在 OOP 中,就像在数据库设计中一样,有一种方法可以提供准确性、一致性和可靠性数据存储在不同的对象中,因为它是在数据库设计中完成的(例如使用外键约束)。例如,在我的应用程序中,我有艺术家、歌曲和专辑对象应该一起交互。我不想要例如,错误地将一首歌与错误的专辑相关联。有人告诉我应该这样做:

class Album
{
public String Name{ get; set;}

List<Track> tracks;

public void AddTrack(Track t)
{
tracks.Add(t);
t.Album = this;
}
}
class Track
{
public Album Album{ get; set;}
public String AlbumName
{
get{ return this.Album.Name}
}

public String ArtistName{ get; set}
}

但是这对我不起作用。有人可以建议我如何实际完成这项工作。具体来说,我如何添加带有标题、专辑和艺术家的新歌曲,并确保如果由于某种奇怪的原因更改了专辑名称,所有轨道仍将返回正确的专辑名称,因为它们是从专辑本身获取数据?

此外,有人可以建议更好的设计吗?我应该使用继承还是任何多态性来使我的设计更健壮?

最佳答案

在数据库设计中,您必须根据业务需求做出选择。方法:你必须问自己可能的星座问题- 一张 CD 上的所有歌曲都是同一位艺术家的吗?否 -> 艺术家字段在轨道上,是 -> 艺术家字段在专辑中- 当你知道一首轨道时,你是否必须能够获得专辑,或者只是特定专辑中的所有轨道- ...

您从 Track 对象引用所引用专辑名称的方式是正确的。值得一提的是:他们确实返回专辑名称,但只是专辑在 GET 时的名称。因此,如果您将 AlbumName 属性分配给可视控件或其他任何内容,则当您更改专辑名称时它不会自动更新。

如果那不是您想听到的,请问得更具体。

关于c# - 强制不同对象之间的数据完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672264/

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