【问题标题】:Db4o Mvc Application ArchitectureDb4o Mvc 应用程序架构
【发布时间】:2011-02-02 06:18:52
【问题描述】:

我目前正在测试 Db4o 以获得一个 asp.net MVC 2 应用程序的想法,但有一些事情我不太确定最好的方法。

我希望我的应用程序使用可猜测的路由而不是 Id 来引用我的实体,但我也认为我需要某种 Id 来更新场景。

例如我想要

/country/usa 而不是 /country/1

我可能想更改键名(可能不是在一个国家,而是在其他实体上),所以我认为我需要一个 Id 作为参考,以在更新对象的字段之前检索对象。从其他 cmets 看来,UUID 的使用时间有点长,并且更愿意使用我自己的 id 来彻底分离关注点。

查看 KandaAlpha 项目,我不太热衷于设计的某些方面,而是更喜欢 S#arp 架构,他们使用 [domainsignature] 和 EntityWithTypedId、IEntityDuplicateChecker、IHasAssignedId、BaseObject 之类的东西和 IValidatable 在它们的实体中控制插入/更新行为,这看起来更干净、更可扩展,涵盖了验证,并且很好地封装在核心和基础存储库类中。

那么将 S#arp 架构移植到 Db4o 是否有意义,还是我仍在考虑 oodb 世界中的 rdbms?

还有在 Db4o 中管理索引(包括上述唯一索引)的最佳实践吗? 例如,它们应该基于模型元数据并在引导程序中使用 DI 加载,还是应该更像 Automapper.CreateMap 那样加载?

我知道这是一个漫无边际的问题,但非常感谢任何想法、想法或建议的阅读材料。

谢谢 马克

【问题讨论】:

    标签: db4o s#arp-architecture


    【解决方案1】:

    这个问题包含很多不同的方面。让我们开始吧。

    通常 db4o 使用object-identity 来区分不同的对象。所以通常你不使用任何ID。但是在 Web 应用程序中,您会丢失请求之间的对象身份,因此无法使用 id。

    internal object ids of db4o can be used。但是,当您对数据库进行碎片整理时,此 ID 可能会更改。我猜你想拥有永久 id 来启用链接等。所以这些 id 不是一个选项。 Guid 或db4o-UUIDs 可以用作ID。不过两者都很长。

    我认为最好的解决方案是添加一个表示对象 ID 的字段。然后你 index that field 并可能添加 an unique constraint 到它。这使您还可以使用不同类型的 id。例如,这可以为您启用“/country/usa”,因为您使用 ISO-Code 作为 id。对于简单的数字自动 ID,您可以 use a clever id-generator

    我不知道你提到的两个框架(KandaAlpha、S#arp)。听起来这些东西仍然有意义。您实现添加特定行为的接口或属性。例如,一个属性告诉系统哪个字段是对象的 id。该属性确保该字段被索引,系统知道如何查询等。

    在我的应用程序中,索引是通过属性添加的。您可以使用一个 db4o-IndexedAttribute。或者你可以添加你自己的。一般来说,我认为两种方式,显式配置或对元数据执行相同操作都是可以的。

    【讨论】:

    • 感谢您的信息,将继续试验。 id 生成器看起来很漂亮。
    猜你喜欢
    • 1970-01-01
    • 2014-10-26
    • 2015-08-18
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2011-07-29
    • 2012-01-20
    相关资源
    最近更新 更多