如何为WPF视图模型和数据模型类选择命名约定?

时间:2010-12-07 18:43:06

标签: c# wpf mvvm

我试图找出在命名我的WPF视图模型和数据模型类时使用的命名约定,并希望得到已经完成此操作的其他人的输入。

我的问题是我要命名的数据模型和视图模型类的名称几乎相同。

作为一个例子,我正在开发一个具有流程图编辑器的应用程序。在我的数据模型中,我将有一个Node类。

在我的视图模型中,我还将有一个Node类来包装数据模型类,并添加视图特定的属性,例如IsSelected

实际区分这些类名以避免混淆的最佳方法是什么?

显然,它们将位于不同的名称空间中。例如Flowchart.NodeFlowchartView.Node。所以他们真的不需要有不同的类名。这就是说,我认为不同的班级名称会更好地帮助,正如我所提到的,避免混淆。

我原本想过将它们命名为NodeNodeView,我认为这听起来很合理,但由于某些原因,我的口味不好。

因此,这是一个关于其他人正在使用的命名约定的建议。这无疑是一个简单的问题,但再次找到好名字似乎是一场持续不断的战斗。

3 个答案:

答案 0 :(得分:4)

我使用“ViewModel”后缀所有视图模型,并使用“View”后缀所有视图。因此,您有NodeViewModelNodeViewNode(数据类)。不过,这只是个人约定。我确信还有其他同样有效的一个。

答案 1 :(得分:1)

我会保持命名空间和文件夹同步,因为这是大多数.NET开发人员的期望。毋庸置疑,每个类都在自己的文件中。这样可以轻松找到项目中的源代码。

/Views
namespace: <Company>.(<Product>|<Technology>)[.<Feature>].Views
/ViewModels
namespace: <Company>.(<Product>|<Technology>)[.<Feature>].ViewModels
/Models
namespace: <Company>.(<Product>|<Technology>)[.<Feature>].Models

无需添加后缀来区分类。命名空间已经这样做了。

答案 2 :(得分:0)

命名空间

  • 系统 - 包含主系统类,a.k.a。模型。
  • System.ViewModels - 包含视图模型。
  • System.Windows - 包含用于演示的任何内容。

简单项目,我包含所有名称空间。

对于更大的项目,我为每个命名空间创建一个项目。避免深度命名空间。请参阅框架设计指南

我没有追加任何后缀,因为命名空间足够清晰。例如,如果我创建一个显示“警报”集合的UserControl(视图),那么我将该用户控件命名为AlertsPanelAlertsListBox或'AlertsItemsControl`。

视图模型除外。在那里我发现最好附加“ViewModel”,因为这个约定避免了必须使用所有三个命名空间时可能发生的自然命名冲突。

作为追加“ViewModel”的替代方法,using VM = System.ViewModels;允许模型和视图模型类共享相同的名称,如VM.Foo oFoo = new VM.Foo(new Foo());