Fry*_*Guy 8 c# tdd mvvm tournament data-structures
我正在转换我的Tournament Organizer软件,它允许创建和操作Double Elimination Tournaments,使用MVVM设计模式,以便更容易测试.在这样做的时候,我将'模型'与UI中直接操作括号结构的一些代码分开.
这将是我为处理锦标赛而编写的第三次软件迭代.第一个是用PHP编写的,并将数据存储在数据库中.第二个版本是我制作的WPF版本,它将数据存储在内存中,然后将其序列化为XML文件.但是,在这两个版本中,我认为实施的各个方面都不干净,而且看起来他们违反了DRY法则.
如果您从头开始创建数据结构以处理双重消除括号,您将如何做?
请注意,它不需要能够在算法上自动生成括号(从4/8/16/32人的预制双重消除加载是我现在正在做的),只是主要的用例设置比赛的获胜者并通过括号'推进'他们.
编辑:为了说清楚,数据结构需要处理双重淘汰赛,因此,一场比赛的胜利者最终可能会与另一场比赛的输家竞争.
我的解决方案是拥有两组数据结构。一根用于支架部分,一根用于座椅。
class Match
{
string Id;
MatchSeat red;
MatchSeat blue;
MatchSeat winner;
MatchSeat loser;
}
class MatchSeat
{
string Id;
Entry Entry;
}
Run Code Online (Sandbox Code Playgroud)
然后为了设置它,我创建了一些辅助函数来获取括号信息并构建结构。
{ "1", "seed1", "seed4", "W1", "L1" },
{ "2", "seed2", "seed3", "W2", "L2" },
{ "3", "W1", "W2", "W3", "L3" },
{ "4", "L1", "L2", "W4", "L4" },
{ "5", "W4", "L3", "W5", "L5" },
{ "F", "W3", "W5", "WF", "WF" }
Run Code Online (Sandbox Code Playgroud)
然后,当种子和获胜者/失败者被填写时,该值仅设置在一处。