2010-03-29 123 views
2

我目前正在测试Db4o的asp.net MVC 2应用程序的想法,但有几件事情我不太确定最好的方式进行。Db4o Mvc应用程序体系结构

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

所以比如我想

/国家/ USA而不是/国家/ 1

我可能想,虽然(也许不是一个国家,但对其他实体),所以更改键名正在考虑在更新字段之前,我需要一个Id作为引用来检索对象。从其他评论看来,UUID似乎有点长,可以使用我自己的ID来干净分离问题。

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

那么S#arp体系结构的一个端口到Db4o是否有意义,还是我仍然在oodb世界中思考rdbms?

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

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

感谢 的Mac

回答

5

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

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

internal object ids of db4o can be used。但是,在对数据库进行碎片整理时,此ID可能会更改。我想你想要有永久性的ID来启用链接等,那么这些ID不是一个选项。 Guid's或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。或者你可以添加你自己的。一般来说,我认为这两种方式,明确配置或与元数据相同都是可以的。

+0

感谢您的信息,将继续尝试。 id生成器看起来非常漂亮。 – 2010-03-31 17:57:34