我正在做一个小的教育项目来练习perst.net。
我们有一个很小的设计问题,那就是如何最好地解决两类对象之间的关系,那就是参与者和冠军。这是一个多到多的关系,因为参与者可以参加许多锦标赛,锦标赛可以有多个参与者。
请建议如何在C#中最好地做到这一点,我应该使用“关系数据库类似”的技术类吗?
发布于 2009-04-22 11:15:57
如果您正在寻找面向对象(或域驱动的设计)方法,那么第三个处理“联接”的对象是完全错误的。您可以使用ILists /数字与添加.处理此问题的方法如下:
public class Participant
{
private readonly IList<Championship> _championships = new List<Championship>();
public IEnumerable<Championship> Championships
{
get { return _championships; }
}
internal void AddChampionship(Championship championship)
{
if (!_championships.Contains(championship))
_championships.Add(championship);
}
}
public class Championship
{
private readonly IList<Participant> _participants = new List<Participant>();
public IEnumerable<Participant> Participants
{
get { return _participants; }
}
public void AddParticipant(Participant participant)
{
if (_participants.Contains(participant)) return;
_participants.Add(participant);
participant.AddChampionship(this);
}
}这里的关键是确保您只从一方管理关系-例如,在本例中,通过调用championship.AddParticipant()
发布于 2009-04-22 11:13:28
在特定项可以使用IEnumerable (或其他集合)属性与其关联多个项的情况下,可以有任何关系。在您的示例中,如下所示:
class Participant {
public IEnumerable<Championship> Championships {
get {
return _championships;
}
}
private List<Championship> _championships;
}一些重要的事情要记住:
发布于 2009-04-22 11:12:07
我不确定这是否适用于你的设计或要求,但可能.
显然,多到多的关系最容易用管理关系的第三个对象来表示。在你的情况下,这将是一个锦标赛的参与者。与其在您的参与者类中拥有举办锦标赛的集合,反之亦然,让他们拥有第三类的实例。冠军参与者对象管理这种关系。然后,它可以作为连接表直接序列化到数据库。
https://stackoverflow.com/questions/776645
复制相似问题