【问题标题】:Subsonic + N-Tier and DDD亚音速 + N-Tier 和 DDD
【发布时间】:2011-08-09 09:44:12
【问题描述】:

经过数小时的研究,我仍然不知道,这是使用 SubSonic 等 ORM 构建 n 层 ddd 应用程序的最佳方式。

项目结构应与以下类似:

1 - 表示层 (WPF MVVM)

2 - 应用层

3 - 域层 -> 域实体/业务实体所在的位置 (POCOs???)

4 - 基础设施层 -> 存储库 + 模型 + 持久性 + SubSonic

我想要的是以下内容:

  1. 使用领域驱动设计方法
  2. 使用存储库模式在域和 ORM 之间进行抽象
  3. 使用 SubSonic 作为 ORM

我的问题是:

结合 SubSonic 实现这一目标的最佳方法是什么?哪个是使用 SubSonic(ActiveRecord、Repository、T4)的最佳方式?

以这种特定方式构建应用程序结构是否有意义(关于 DDD 与 SubSonic 结合使用)?

感谢您的回答和想法。

克里桑

【问题讨论】:

  • SubSonic 仅由少数人维护。我会厌倦在关键业务应用程序上使用它。 nHibernate、LinqToSql 和 EF 各有优缺点,但可能比 SubSonic 更适合长期投资。

标签: subsonic domain-driven-design n-tier-architecture


【解决方案1】:

请注意,SubSonic 强制您进入每个表模型的类。那么这些类适合直接用作 DDD 中的实体和聚合。您当然可以在 SubSonic 类和您自己的域模型类之间进行映射,但是使用 SubSonic 并没有给您带来太多好处。

【讨论】:

  • 您好,谢谢您的回答。这就是我所期望的,但不想听到 ;-) 那么这是否意味着 DDD 是不可能的,将 SubSonic 与 DDD 一起使用真的没有任何意义吗?
  • 您知道其他任何与 SubSonic 一样快且更适合 DDD 解决方案的 ORM 吗?似乎例如nHibernate 更适合?!
  • 你可以这样做,但你不想直接使用 SubSonic 类。您可能希望拥有自己的域模型类,并且 SubSonic 类不会暴露在存储库层之上。那时,SubSonic 只是一个数据访问工具——如果这就是你使用它的全部,我建议你使用像 Massive、Dapper 或 PetaPoco 这样的 micro-orm(那个真的很酷)。否则就另辟蹊径,使用 NHibernate,它可以灵活地将您的数据库直接映射到体面的域模型类。
  • micro-ORM 的速度比 SubSonic 快(注意,SubSonic 中存在一些重大的性能问题,尤其是 LINQ),但您仍然需要从 ORM 桥接到域(不一定是坏事,但更多的努力)。否则,它基本上是 NHibernate。 LLBLGen 可能会起作用,但对它还不够熟悉,无法确定。但我可以说 Linq2Sql 甚至 Entity Framework 仍然存在设计问题,这将使使用它们进行 DDD 不是一条顺畅的路径(与 NHibernate 相比)。
  • 非常感谢您的回答!对我帮助很大!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
相关资源
最近更新 更多