我正在开展一个小型教育项目来锻炼perst.net.
我们有一个很小的设计问题,那就是如何最好地解决两类对象之间的关系,即参与者和冠军.这是一个多对多的关系,因为参与者可以参加许多锦标赛,而锦标赛可以有多个参与者.
请告知如何在C#中做到最好,我应该使用’关系数据库’技术类吗?
解决方法
如果您正在寻找面向对象(或域驱动设计)方法,那么处理“连接”的第三个对象完全是错误的方法.您可以使用ILists / Enumerables和Add …方法来处理此问题,如下所示:
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()