Db4o Mvc 应用程序架构

标签 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 在其实体中控制插入/更新行为,这看起来更干净、更可扩展,涵盖验证并很好地封装在核心和基础存储库类中。

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

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

我知道这是一个有点漫无目的的问题,但我们非常感谢任何想法、想法或建议的阅读 Material 。

谢谢 苹果电脑

最佳答案

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

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

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 代码作为 id。对于简单的数字自动 ID,您可以 use a clever id-generator .

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

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

关于Db4o Mvc 应用程序架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2541789/

相关文章:

java - 在 Android 应用程序中存储在 db4o 中的格式

oop - 如何在对象数据库中设计多对多关系?

c# - 体系结构问题:干净的解决方案应该放在哪个类的哪个类中?

c# - 如何实现历史版本控制?

c# - S#arp架构: Where to put this domain logic

java - 从容器对象中删除引用后,db4o 会留下空闲对象。如何解决呢?

jdbc - 处理对象数据库(如 db4o)中的数据维护

asp.net-mvc - automapper + 延迟加载 + mvc contrib 网格 + s#arp 存储库

asp.net-mvc - S#arp 架构 vs 直接 IOC + NHibernate + MVC