Wpf 在重构现有代码以使用MVVM模式时,如何解决术语上的混淆?

Wpf 在重构现有代码以使用MVVM模式时,如何解决术语上的混淆?,wpf,mvvm,naming-conventions,terminology,Wpf,Mvvm,Naming Conventions,Terminology,我正在与术语冲突作斗争,无法找到一个好的解决方案。也许其他人也有这个问题 我正在重建现有的WinForms应用程序以使用WPF。我将在我的新应用程序中使用MVVM模式。我的旧应用程序广泛使用ADO;具体来说,我有包装DataRow对象的Row对象。当我想定义一行中哪些列可以在UI中的特定上下文中显示时,该定义存在于RowView对象中 从概念上讲,“视图”是一个合适的术语-单个底层DataRow可以有多个Row对象,每个对象使用RowView对象定义其列的子集、访问权限等,就像SQL数据库中的视

我正在与术语冲突作斗争,无法找到一个好的解决方案。也许其他人也有这个问题

我正在重建现有的WinForms应用程序以使用WPF。我将在我的新应用程序中使用MVVM模式。我的旧应用程序广泛使用ADO;具体来说,我有包装
DataRow
对象的
Row
对象。当我想定义一行中哪些列可以在UI中的特定上下文中显示时,该定义存在于
RowView
对象中

从概念上讲,“视图”是一个合适的术语-单个底层
DataRow
可以有多个
Row
对象,每个对象使用
RowView
对象定义其列的子集、访问权限等,就像SQL数据库中的视图一样。
RowView
集合中的
ColumnView
对象包含关于特定视图中每个列的表示的元信息

这一切都是用一个湿漉漉的砰砰声击中MVVM模式。在MVVM中,“视图”的含义有所不同:它表示UI对对象的表示。就MVVM而言,我的应用程序的
RowView
不是视图。对于MVVM来说,实际上没有一个
RowView
对象本身,但是有一个底层
RowViewModel
支持UI和特定
Row
对象之间的交互逻辑,以及一个底层
ColumnView
对象用于该行的每一列

通常情况下,术语混乱是由类别错误引起的,但在这种情况下,我认为我的类别是正确的;问题是不同的上下文对不同的事物使用相同的名称

当这种情况发生时,天真的答案是“名称空间”,但尽管使用名称空间消除这些术语的歧义在技术上肯定会起作用,但我严重怀疑,它是否能解开新开发人员在一点点遇到这段代码时所经历的困惑

另一种可能是将
对象的名称更改为其他名称。比如,我可以在模型中使用“行”和“列”,在视图和视图模型中使用“记录”和“字段”。因此,我可以从
行视图
组成
记录
,从每个列值和
列视图
组成
字段
。然后我可以拥有
RecordViewModel
FieldViewModel
对象,这些对象将暴露于WPF,UI开发人员将永远不必知道存在
RowView
ColumnView
对象。但是这种也很臭


在重建软件以使用MVVM时,是否有其他人遇到过此类问题?你到底做了什么?

我更喜欢在这些情况下附加一些东西,有点像匈牙利语的反符号

  • *模型视图*数据视图适用于模型(例如:ExpenseModelViewExpenseDataView
  • *UIView用于视图本身(例如:ExpenseUIView
就我个人而言,我使用名称空间和一小部分约定。我知道我的模型在哪里以及它们是如何使用的,因为我在整个应用程序以及我的虚拟机和视图中始终使用它们。我可以通过使用或引用视图、视图模型或模型的方式和位置来区分视图、视图模型或模型之间的区别,我想您也会发现这一点


但是,如果您发现这会影响新开发人员的入职,或者您在制定一致的约定方面遇到困难,您可以尝试匈牙利式的命名约定来稍微区分类型。

+1。作为一个项目的唯一开发者的一个巨大弱点是,那些非常明显的答案可能完全不在你的掌握之中。80%的时候,我仅仅通过写问题就得到了答案(这是一个未被注意到的好处)。这可不是那种时候。谢谢。@Robert Rossney:哈。。是的,我听到了。有点难,没有一点协同作用。大多数人都低估了有人可以把事情从自己身上弹下来。很高兴我能帮忙。