2

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

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

所以例如我想要

/country/usa 而不是 /country/1

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

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

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

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

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

谢谢麦克

4

1 回答 1

5

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

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

可以使用 db4o的内部对象 ID 。但是,当您对数据库进行碎片整理时,此 ID 可能会更改。我猜你想拥有永久 id 来启用链接等。所以这些 id 不是一个选项。Guid 或db4o-UUID可用作 id。然而,两者都相当长。

我认为最好的解决方案是添加一个代表对象 ID 的字段。然后您索引该字段并可能为其添加唯一约束。这使您还可以使用不同类型的 id。例如,这可以为您启用“/country/usa”,因为您使用 ISO-Code 作为 id。对于简单的数字自动 ID,您可以使用聪明的 id-generator

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

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

于 2010-03-30T12:27:41.677 回答