我目前正在为asp.net MVC2应用程序的想法测试Db4o,但有几件事我不太确定最好的继续进行的方式。
我希望我的应用程序使用可猜测的路由而不是Id来引用我的实体,但我也认为在更新场景中需要某种Id。
例如,我想要
/country/usa而不是/country/1
我可能想要更改键名(可能不是针对某个国家,而是针对其他实体),因此我认为在更新对象的字段之前,我需要一个Id作为检索对象的引用。从其他评论来看,使用UUID似乎有点长,并且更喜欢使用我自己的id,以便清晰地分离关注点。
看看KandaAlpha项目,我对设计的某些方面不太感兴趣,更喜欢S#arp架构,他们在实体中使用诸如域签名和EntityWithTypedId、IEntityDuplicateChecker、IHasAssignedId、BaseObject和IValidatable之类的东西来控制插入/更新行为,这些行为看起来更干净、更具可扩展性,涵盖了验证,并且很好地封装在核心和基础存储库类中。
那么,将S#arp架构移植到Db4o中是否有意义,或者我仍然认为rdbms是在一个面向对象的世界中?
另外,在Db4o中管理索引(包括如上所述的唯一索引)有没有最佳实践?例如,它们应该是基于模型元数据并在引导程序中使用DI加载的,还是应该更像Automapper.CreateMap那样加载?
我知道这是一个有点杂乱无章的问题,但任何想法、想法或建议的阅读材料都是非常感谢的。
谢谢你,Mac
发布于 2010-03-30 20:27:42
这个问题包含了很多不同的方面。让我们开始吧。
通常,db4o使用object-identity来区分不同的对象。所以通常你不会使用任何ids。然而,在web应用程序中,请求之间的对象标识是松散的,因此没有办法使用in。
用于此的internal object ids of db4o can be used。但是,当您对数据库进行碎片整理时,此ids可能会更改。我猜你想要永久的ids来启用链接等,所以这些ids不是一个选项。Guid或db4o-UUIDs可用作ids。然而,两者都相当长。
我认为最好的解决方案是添加一个表示对象ID的字段。然后你可以index that field,也许可以添加an unique constraint到它里面。这使您还可以使用不同类型的ids。例如,您可以使用'/country/usa',因为您使用ISO-Code作为id。对于简单的数字自动ids,您可以使用use a clever id-generator。
我不知道你提到的两个框架(KandaAlpha,S#arp)。听起来这个东西还是有意义的。您可以实现添加特定行为的接口或属性。例如,告诉系统哪个字段是对象的id的属性。该属性确保此字段已被索引,系统知道如何查询等。
在我的应用程序中,索引是通过属性添加的。您可以使用db4o-IndexedAttribute。或者你可以添加你自己的。总的来说,我认为两种方式都可以,显式配置或对元数据执行相同的操作。
https://stackoverflow.com/questions/2541789
复制相似问题