gpt4 book ai didi

c# - 模型- View - View 模型中的适配器

转载 作者:行者123 更新时间:2023-12-03 10:28:14 26 4
gpt4 key购买 nike

我正在使用 WPF 和 MVVM 做一个学校项目,我想知道在我的一个模型中是否可以使用适配器,或者我应该在我的 ViewModel 中使用它吗?我正在谈论的模型看起来像这样:

public class P2PMeterSession
{
public P2PMeterAnnounce MeterAnnounce { get; set; }
public DateTime DisposeTime { get; set; }
public DateTime GetMimTime { get; set; }
public DateTime SetTimeTime { get; set; }
public DateTime LoadProfileLogHackTime { get; set; }
public List<DateTime> GetConventionalDataTime { get; set; }
public DateTime GetGsmDataTime { get; set; }
public Dictionary<DateTime, SessionEvent> Sessionevents { get; set; }

public P2PMeterSession()
{
GetConventionalDataTime = new List<DateTime>();
}
public int GetSessionTimeSpan
{
get
{
var sessionStart = MeterAnnounce.MeterAnnounceTimeStamp;
var sessionEnd = DisposeTime;
return (int)(sessionEnd - sessionStart).TotalSeconds;
}
}
public List<KeyValuePair<DateTime, SessionEvent>> ReturnEvents
{
get
{
List<KeyValuePair<DateTime, SessionEvent>> RE = new List<KeyValuePair<DateTime, SessionEvent>>();
var AnnounceEvent = MeterAnnounce.MeterAnnounceTimeStamp;
var DisposeEvent = DisposeTime;
var GetMimEvent = GetMimTime;
var SetTimeEvent = SetTimeTime;
var LoadProfileLogHackTimeEvent = LoadProfileLogHackTime;
var GetConventionalDataEvent = GetConventionalDataTime;
var GetGsmDataEvent = GetGsmDataTime;

RE.Add(new KeyValuePair<DateTime, SessionEvent>(AnnounceEvent, SessionEvent.Announce));
if (GetMimTime != DateTime.MinValue)
RE.Add(new KeyValuePair<DateTime, SessionEvent>(GetMimEvent, SessionEvent.GetMim));
if (SetTimeTime != DateTime.MinValue)
RE.Add(new KeyValuePair<DateTime, SessionEvent>(SetTimeEvent, SessionEvent.SetTime));
if (LoadProfileLogHackTime != DateTime.MinValue)
RE.Add(new KeyValuePair<DateTime, SessionEvent>(LoadProfileLogHackTimeEvent, SessionEvent.LoadProfileLogHack));
if (GetConventionalDataTime != null)
GetConventionalDataTime.ForEach(x => RE.Add(new KeyValuePair<DateTime, SessionEvent>(x, SessionEvent.GetConventionalData)));
if (GetGsmDataTime != DateTime.MinValue)
RE.Add(new KeyValuePair<DateTime, SessionEvent>(GetGsmDataEvent, SessionEvent.GetGsmData));

RE.Add(new KeyValuePair<DateTime, SessionEvent>(DisposeEvent, SessionEvent.Dispose));
return RE;
}
}

public enum SessionEvent
{
Announce,
Dispose,
GetMim,
SetTime,
LoadProfileLogHack,
GetConventionalData,
GetGsmData
}
}

最佳答案

通常在使用 MVVM 时, View 模型应为其相关 View 提供所有相关数据和功能。因此,任何数据访问服务或您所称的适配器都应该可以从 View 模型而不是模型类访问,以便它们可以访问数据并将其显示在 View 中。

虽然有些人可能不同意这一点,但我倾向于使用模型或数据类型类作为数据的“容器”,并且更喜欢在 View 模型中公开任何功能。这使我能够将该功能与其他 View 模型测试一起作为标准进行测试。

由于您的项目只是一个学校项目,您不太可能为您的 View 模型编写单元测试。但是,如果您是,那么您的适配器可能会干扰测试。如果其中的任何代码需要单独测试,您可以从您的P2PMeterSession 创建一个接口(interface)。类并添加类型为 IP2PMeterSession 的属性进入 View 模型。

使用 P2PMeterSession 的实际实例填充此属性当运行应用程序并使用 MockP2PMeterSession测试期间上课。 MockP2PMeterSession类可以只返回预设数据,甚至什么都不返回,具体取决于您的测试。

关于c# - 模型- View - View 模型中的适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25908319/

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