【发布时间】:2012-07-07 02:46:32
【问题描述】:
我正在开发一个数据库应用程序,它管理行业特定的输入,然后通过一些复杂的计算、查找等运行该信息,以返回一系列其他值和一个通过/不通过的结论。
我决定使用实体框架(代码优先以实现提供者独立性)和 WPF(MVVM 模式)。我使用 POCO 实体作为我的数据模型,而视图模型正在处理诸如基本数据/业务规则验证之类的常规操作。
似乎 EF + WPF/MVVM 非常擅长显示和验证输入并将其输入数据库以查询您的典型业务应用程序,例如产品、客户、订单设置。但根本不清楚在哪里插入“计算层”。在视图模型和数据模型(我的 POCO)之间,事情已经有些臃肿了,现在我正面临着添加另一个层,非常像其他两个层。
也许解决此问题的最佳方法是使计算层成为一种元视图模型,并将尽可能多的验证、更改通知等推送到其中,并使用更轻量的实际视图模型运行。
有人遇到过这种情况吗?
编辑
事实证明,我真正需要的是精简视图模型并增强实体。所以我减轻了视图模型,将属性更改通知和基本验证移至实体以允许直接绑定,并使计算类直接使用实体以及向实体添加一些基本例程。感谢 @Peter Porfy 提供有关思想 ADM 文章的链接。
为了使验证更接近实体,使用了Fluent Validation(极好的建议@Gloopy!)。为了更容易在实体上实现属性更改通知,改编this technique。为了避免在视图模型中创建无穷无尽的属性包装器(设置 HasChanges 属性),我使用了Josh Smith's PropertyObserver。
【问题讨论】:
标签: entity-framework design-patterns mvvm ef-code-first