如何使用 Massive ORM 实现验证?
Posted
技术标签:
【中文标题】如何使用 Massive ORM 实现验证?【英文标题】:How to implement validation with the Massive ORM? 【发布时间】:2011-07-09 00:49:57 【问题描述】:我喜欢 Rails,所以我被 Rob Conery's Massive ORM 所吸引,因为它......嗯,非常糟糕。
我的问题是,您究竟应该如何使用 Massive 进行验证?在 Rails 中,您可以使用简单的“validates”关键字进行内联验证和/或引用要调用的方法...以及定义何时进行此类验证的能力(例如,仅用于创建、保存后等。 .).
Massive 是否提供此类受 Rails 启发的验证?如果是这样,推荐的方法是什么?
非常感谢-wg
【问题讨论】:
【参考方案1】:我今天也在想同样的事情,我仍然没有真正满意的答案,但我确实找到了最近被推送到 Github 并使用 Massive 进行数据访问的 Tekpub MVC 3 系列的示例代码 -
https://github.com/tekpub/mvc3
这个class 包含一些针对视图模型的 DataAnnotation 验证,据我所知,没有一个“域”类包含任何验证。
【讨论】:
是的。视图模型验证很棒,但如果您不能在域中进行验证,那么您将失败。我确信它是可能的......问题是它如何以及是否既直观又灵活(如 Rails 'validations')。【参考方案2】:根据 GitHub 上的自述文件,最近向 Massive 添加了验证。
【讨论】:
【参考方案3】:对于 Asp.net MVC,最推荐的方法是使用 DataAnnotations 或 FluentValidations 进行验证。如果您只是用谷歌搜索这些术语,就会有大量的知识。
我们 Seesharpies 不喜欢针对数据库模型进行验证,因此我们可以清晰地分离关注点。验证数据库模型并没有“错误”,但由于静态和编译语言的僵化,其他替代方法就没有多大意义了。
【讨论】:
我的问题是您将如何使用 Massive 实现此类验证?我熟悉并使用 DataAnnotations 和其他基于属性的验证机制......但我不确定你会如何使用 Massive 来做到这一点。谢谢【参考方案4】:我不会使用 Massive 进行验证。对于我的域模型,我有使用 DataAnnotations 的“命令”DTO。我的域对象对它们进行验证,然后我使用“域事件”模式将更改发布到我的聚合中。
这是我将使用大规模的地方 - 收听我的域的订阅者将处理引发的事件 DTO,并使用它们通过大规模更新数据库。然后我的视图模型将使用海量查询数据库。
我一直在使用 EF 4.1,但我厌倦了映射命令 -> 事件 -> 视图模型/dto。我将使用大规模,因此我不必再定义视图模型/dto。
【讨论】:
【参考方案5】:进行验证与使用 EF 进行验证没有什么不同。这是对上述答案的评论。
如果您熟悉 DataAnnotations,那么您就知道如何进行验证。假设您有视图模型,然后将注释添加到它们。在您的控制器中,您正在使用进行验证的视图模型。验证后,您会将这些传递给您的数据层,这可能是巨大的或 ef 或其他。
要清楚,您不是在验证实体,而是在验证视图模型。希望这是有道理的!我自己也几乎看不懂哈哈哈哈。
【讨论】:
验证应该是您的 DOMAIN 模型的一部分,而不是您的 VIEW 模型,以保持 DRY 并确保无论客户端(浏览器、Web 服务、移动应用程序等)如何都能进行验证。同样,我正在寻找一个在使用大规模 ORM 的域模型中进行验证的具体示例。以上是关于如何使用 Massive ORM 实现验证?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:如何使用 eloquent ORM 查找未经过身份验证的用户的信息?
CodeIgniter DataMapper ORM 如何知道要应用哪组验证规则?