【发布时间】:2014-03-17 09:57:59
【问题描述】:
我正在开发一个遵循 MVVM 模式的 WPF 应用程序。尽管将验证转移到服务中,但我最终得到了一个运行多行代码的胖视图模型(在我的例子中接近 1000 行)。 我在这里添加了视图模型的接口。我有一些作为组合公开的集合,并且基于组合选择,我必须执行验证/调用服务/将过滤应用于其他组合
public interface ISampleViewModel {
ObservableCollection<InstrumentDto> Collection1 { get; set; }
ObservableCollection<TenderViewConfigDetailViewModel> Collection2 { get; set; }
ObservableCollection<TenderViewConfigDetailViewModel> Collection3 { get; set; }
ObservableCollection<TenderViewConfigDetailViewModel> Collection4 { get; set; }
ObservableCollection<TenderViewConfigDetailViewModel> Collection5 { get; set; }
TenderViewConfigDetailViewModel SelectedViewConfigDetail { get; set; }
int SelectedTenderViewIndex { get; set; }
int SelectedInstrumentsViewIndex { get; set; }
SortableCollection<TenderViewToInstrumentViewModel> CurrentInstruments { get; set; }
TenderViewToInstrumentViewModel SelectedInstrumentForTenderView { get; set; }
InstrumentDto SelectedInstrument { get; set; }
bool IsAllInstrumentsFocused { get; set; }
ICommand ApplyChangesCommand { get; }
ICommand AddTenderPanelViewCommand { get; }
ICommand DeleteTenderPanelViewCommand { get; }
ICommand ModifyTenderViewVisiblityCommand { get; }
ICommand AddInstrumentsToPanelViewCommand { get; }
ICommand DeleteInstrumentsFromPanelViewCommand { get; }
ICommand MoveUpTenderListViewCommand { get; }
ICommand MoveDownTenderListViewCommand { get; }
ICommand MoveUpInstrumentsCommand { get; }
ICommand MoveDownInstrumentsCommand { get; }
bool IsValidModel { get; }
void PublishTenderViewConfigChanges(TenderViewConfigDetailViewModel viewModel,EventActionType actionType);
}
上述一组功能使我的视图模型变得更庞大。我怎样才能避免它?我想不出将功能分解成更小的控件,因为它们是依赖的?我在这里遗漏了什么吗?
【问题讨论】:
-
为什么你的视图模型很胖?能给我举个例子吗?假设它解决了一个简单的问题,那么 1000 行视图模型没有任何问题。如果您使用单个视图模型覆盖 10 个基础,那么可能是时候重构了