将视图模型与域模型混合是否合理?
所以即视图模型对象包含一些域模型对象(不是相反的方式!)
不知道怎么解释这个,但是这里......
我使用EF 4.3构建了代码优先数据模型.其中一个类"地址"包含典型的地址数据,街道,城市,州等.模型中的其他类包含"地址"类的实例.
问题.将使用不同的视图收集/呈现数据,其中一些将需要地址字段,而另一些则不需要.
我可以构建不同的视图模型,每个模型都具有必要的验证属性,并在数据模型和视图模型之间来回复制数据,但这似乎是错误的.
我错过了什么?必须有一种更聪明的方法来做到这一点.
谢谢你的帮助,吉米
假设我有以下课程:
class Camera
{
public Camera(
double exposure,
double brightness,
double contrast,
RegionOfInterest regionOfInterest)
{
this.exposure = exposure;
this.brightness = brightness;
this.contrast = contrast;
this.regionOfInterest = regionOfInterest;
}
public void ConfigureAcquisitionFifo(IAcquisitionFifo acquisitionFifo)
{
// do stuff to the acquisition FIFO
}
readonly double exposure;
readonly double brightness;
readonly double contrast;
readonly RegionOfInterest regionOfInterest;
}
Run Code Online (Sandbox Code Playgroud)
...和DTO在服务边界(WCF)上传输摄像头信息,比如在WinForms/WPF/Web应用程序中查看:
using System.Runtime.Serialization;
[DataContract]
public class CameraData
{
[DataMember]
public double Exposure { get; set; }
[DataMember]
public double Brightness { get; set; }
[DataMember]
public …Run Code Online (Sandbox Code Playgroud) 在骨干中,我可以以不同的方式使用我的模型.
据我所知,(数据)模型用于存储数据(可能来自RESTful Web服务器),ViewModel用于存储有关特定视图的信息(例如隐藏/显示的视图状态).
我的大部分知识来自这个问题.
看完这其中,笔者说的文章:
在数据更改时呈现UI,而不是用户交互
和
流程是:用户交互 - >数据更改 - >视图渲染.
例如,如果我们在音频播放器中编写播放/暂停切换按钮,则流程将为:
- 用户点击"播放"
- 模型(数据)状态变为'播放'
- 视图以"播放"模式呈现
遵循此模式可确保从其他来源(例如快进,新播放列表,网络错误等)触发的状态更改将切换我们的按钮以执行正确的操作.换句话说,我们有一个单一的事实来源:每当我们的模型发生变化时,我们都知道应该渲染我们的按钮.
var PlayPauseButton = Backbone.View.extend({
tagName: 'li',
className: 'icon',
initialize: function(){
this.model.on('change:status', this.render, this);
},
render: function(){
this.$el.removeClass('icon-play').removeClass('icon-pause');
this.$el.addClass('icon-' + (this.isPlaying() ? 'pause' : 'play'));
},
events: {
'click': function(){
this.model.set('status', this.isPlaying() ? 'paused' : 'playing');
}
},
isPlaying: function(){
return this.model.get('status') === 'playing';
}
});
Run Code Online (Sandbox Code Playgroud)
我开始怀疑使用每一个的优点和缺点.
假设我们每个视图只有一个模型(我知道我们可以有更多,但是如果我们将它限制为一个).我能想到,
ViewModel专业人士:
缺点:
(数据)模型专业人士:
缺点:
asp.net-mvc ×1
backbone.js ×1
c# ×1
domain-model ×1
dto ×1
javascript ×1
jquery ×1
model ×1
mvvm ×1
oop ×1
viewmodel ×1