C# 模型视图ViewModel中的适配器
我正在使用WPF和MVVM做一个学校项目,我想知道在我的一个模型中安装适配器是否合适,还是应该在ViewModel中安装?我所说的模型是这样的:C# 模型视图ViewModel中的适配器,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在使用WPF和MVVM做一个学校项目,我想知道在我的一个模型中安装适配器是否合适,还是应该在ViewModel中安装?我所说的模型是这样的: public class P2PMeterSession { public P2PMeterAnnounce MeterAnnounce { get; set; } public DateTime DisposeTime { get; set; } public DateTime GetMimTime { get; set; }
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
}
}
公共类P2PMeterSession
{
公共P2pMeterAnnounceMeteranNounce{get;set;}
公共日期时间处理时间{get;set;}
公共日期时间GetMimTime{get;set;}
public DateTime SetTimeTime{get;set;}
公共日期时间LoadProfileLogHackTime{get;set;}
公共列表GetConventionalDataTime{get;set;}
public DateTime GetGsmDataTime{get;set;}
公共字典会话事件{get;set;}
公共会话()
{
GetConventionalDataTime=新列表();
}
公共int GetSessionTimeSpan
{
得到
{
var sessionStart=MeterAnnounce.MeterAnnounceTimeStamp;
var sessionEnd=处置时间;
return(int)(sessionEnd-sessionStart).TotalSeconds;
}
}
公众活动列表
{
得到
{
List RE=新列表();
var AnnounceEvent=MeterAnnounce.MeterAnnounceTimeStamp;
var DisposeEvent=处置时间;
var GetMimEvent=GetMimTime;
var SetTimeEvent=SetTimeTime;
var LoadProfileLogHackTimeEvent=LoadProfileLogHackTime;
var GetConventionalDataEvent=GetConventionalDataTime;
var GetGsmDataEvent=GetGsmDataTime;
关于添加(新的KeyValuePair(AnnounceEvent,SessionEvent.Announce));
if(GetMimTime!=DateTime.MinValue)
关于添加(新的KeyValuePair(GetMimEvent,SessionEvent.GetMim));
if(SetTimeTime!=DateTime.MinValue)
添加(新的KeyValuePair(SetTimeEvent,SessionEvent.SetTime));
if(LoadProfileLogHackTime!=DateTime.MinValue)
添加(新的KeyValuePair(LoadProfileLogHackTimeEvent,SessionEvent.LoadProfileLogHack));
if(GetConventionalDataTime!=null)
ForEach(x=>RE.Add(新的KeyValuePair(x,SessionEvent.GetConventionalData));
if(GetGsmDataTime!=DateTime.MinValue)
添加(新的KeyValuePair(GetGsmDataEvent,SessionEvent.GetGsmData));
关于添加(新的KeyValuePair(disposeeEvent,SessionEvent.Dispose));
返回RE;
}
}
公共枚举会话事件
{
宣布
处置
格特姆,
设定时间,
LoadProfileLogHack,
获取常规数据,
GetGsmData
}
}
通常使用MVVM时,视图模型应为其相关视图提供所有相关数据和功能。因此,应该可以从视图模型而不是模型类访问任何数据访问服务或适配器,以便它们可以访问数据并在视图中显示数据
虽然有些人可能不同意这一点,但我倾向于使用模型或数据类型类作为数据的“容器”,并且更喜欢在视图模型中公开任何功能。这使我能够将该功能与其他视图模型测试一起作为标准测试
由于您的项目只是一个学校项目,您不太可能为视图模型编写单元测试。但是,如果是,则适配器可能会干扰测试。如果其中的任何代码需要单独测试,您可以从P2PMeterSession
类创建一个接口,并将类型为ip2metersession
的属性添加到视图模型中
运行应用程序时,使用
P2PMeterSession
的实际实例填充此属性,并在测试期间使用MockP2PMeterSession
类填充此属性。MockP2PMeterSession
类可以只返回预设数据,甚至不返回任何数据,具体取决于您的测试。查看TDD并使用一个接口来实现此目的。谢谢,这真的很有帮助:)