代码之家  ›  专栏  ›  技术社区  ›  Rama Rivera

域模型应该放在哪一层?

  •  0
  • Rama Rivera  · 技术社区  · 9 年前

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

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

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

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

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

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

    1 回复  |  直到 9 年前
        1
  •  0
  •   Edwin van Vliet    9 年前

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

    至于域,您可以为每个域创建一组项目,如domains.NameHere。立面,域名此处。实现,Domains.NameHere.UnitTests。这样,您还可以在立面项目中分离接口。您可以在域中添加服务层。实现项目,并在这里包含所有其他域类。

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