Db4o Mvc应用程序架构

Sco*_*kay 2 db4o s#arp-architecture

我目前正在测试Db4o的asp.net MVC 2应用程序的想法,但有一些我不太确定的最佳方法.

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

所以我想要

/ country/usa而不是/ country/1

我可能想要更改密钥名称(不是在一个国家,而是在其他实体上),所以我想我需要一个Id作为参考来检索对象,然后再更新它的字段.从其他评论来看,UUID似乎有点长,无论如何都希望使用我自己的id来清晰地分离关注点.

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

因此,对于Db4o的S#arp架构的端口是否有意义,或者我仍然在想odbb世界中的rdbms?

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

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

谢谢Mac

Gam*_*lor 5

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

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

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

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

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

在我的应用程序中,索引是通过属性添加的.您可以使用db4o-IndexedAttribute.或者你可以添加自己的.一般来说,我认为两种方式,明确配置或对元数据做同样的事情都可以.