【问题标题】:In which layer should the domain model go?领域模型应该放在哪一层?
【发布时间】:2016-04-29 20:14:57
【问题描述】:

我们必须为大学项目编写数字标牌应用程序。我们最初使用的语言和框架是:.Net、C#、实体框架(计划使用 NHibernate)、Winforms(计划使用 WPF)。

我们被告知这样做的方式可以让我们轻松更改表示和持久性逻辑。

因此,我们决定使用三层:“了解”服务层(或业务逻辑层)的 UI 层、了解持久层的服务层和持久层。他们每个人都是一个单独的项目。 目前,域类或实体类(在本例中为 Campaign、RSSFeed、User 等类)包含在持久性项目或层下的“模型”命名空间中。

我们为数据访问逻辑定义了一些接口,以便能够轻松切换存储介质。

问题是:如果为了更改持久性逻辑,我们必须更改实际项目引用以替换那些替换(例如 NHibernate 的实体框架),那么应该在哪里定义这个接口?更重要的是,应该在哪里定义域类?添加另一个名为“域”的层是否“有效”,持久层和服务层都知道?

如果我写的东西很奇怪,我很抱歉,我的书面英语有些生疏。

【问题讨论】:

    标签: c# .net entity-framework persistence business-logic-layer


    【解决方案1】:

    您可以做的是将持久性逻辑的接口提取到一个单独的项目中。然后只需将实现(EF 或 NHibernate)注入到使用它的类中。这样使用它的类只需要引用包含该接口的项目,而不需要具体的实现。

    对于域,您可以为每个域创建一组项目,例如 Domains.NameHere.Facade、Domains.NameHere.Implementation、Domains.NameHere.UnitTests。这样,您还可以分离立面项目中的接口。您可以在 Domains.Implementation 项目中添加您的服务层,并在此处包含您的所有其他域类。

    对于您的模型,您可以添加一个单独的项目,例如 Domains.Models 或将它们添加到您的外观项目中。对于您的持久性部分,您可以拥有自己的模型项目。这样您就可以更改模型中的某些内容,而无需更改持久性部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2012-04-19
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多