流水账-Avalonia
流水账-Avalonia
近几天尝试用
Avalonia
搞了一个Draw
(也算是借鉴🦊佬的学习路线了),但是非常悲伤的是没有设计出MVVM的架构,仅是MV架构就要我半条命,ViewModel层拼尽全力不知道该填些什么…小记一下我的折腾。
Model层
没有高端的玩意儿,总而言之就是💩山,只有最最最基础的class
,没有record
、dictionary
那些🥹,用不惯喵。我甚至把所有类都塞到了一个.cs
文件里,不过能跑就⭐(×),唉唉,不管了。
我设计了四个类,Prize
、Participant
、DrawResult
、DrawManager
,分别用来放奖项信息、参与者信息、抽奖结果和抽奖发起者的行为。
前三个类存放相关信息,当然也要支持修改,支持读取,所以均使用{get;set;}
访问控制器。
至于抽奖发起者,一个最重要的行为就是要组织开奖,也就是获取DrawWinners()
的行为,而获奖者一般也不止一个,所以我选用了List
,也就封装出了public List<DrawResult> DrawWinners()
这个函数。接下来细想一下,这个函数需要哪些实现逻辑呢?
- 首先需要获取参与者信息
- 当然也需要获取奖项设立的情况
- 抽奖的随机性也是必须的
- 最后还要及时删除参与者的数据,避免重复抽奖
如下:
1 | public List<DrawResult> DrawWinners() |
以上就是抽奖的实现逻辑,此外,值得一提的是readonly
关键字的使用,
1 | private readonly List<Participant> _participants = new(); |
这是private封装(内部只读存储),readonly
使它不能被重新赋值(例如不能再 _participants = new List<...>()
),但可以修改集合内部的元素(如 _participants.Add(...)
),这就可以很好地支持了操作部分参与者的需求。
1 | public ReadOnlyCollection<Participant> Participants => _participants.AsReadOnly(); |
这也是封装(readonly只读保护),给外部提供的readonly
只读访问接口,支持获取参与者信息,也保护了数据不被外部删改。
View层
View视图的UI设计(.axaml
)和事件绑定(.axaml.cs
)相关的数据交互我都放在了这一层处理。
关于UI设计等我过几天再补吧,太累了,先不写了(
从.csproj
到.exe
在这一步我也走了很多的弯路,最后也是在拷打llm
各AI大模型下完成了这最后一步。总而言之,能跑就是win!
Keep Ongoing
👆🏼