gpt4 book ai didi

c# - C# 中的三层应用程序 - 放置数据和业务模型的位置

转载 作者:太空狗 更新时间:2023-10-29 23:08:53 24 4
gpt4 key购买 nike

我正在用 C# 构建一个标准的三层应用程序

1 个前端控制台应用程序/但我可能会将其更改为 ASP.NET MVC 网页

2 业务逻辑层

3 使用 Entity Framework 连接到 SQL 数据库的数据层/但这可能会更改为 windows azure

主要目的是展示一些客户数据。

数据库中存储的客户有以下字段——

CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
Creationdate
Updatedate
IsDisabled //this represents "deleted" customers i.e. the app will never use deleted customers, but I want to keep them in the database anyway

在中间层,我只要

CustomerID
Firstname
Lastname
DateOfBirth
Othervalue1
Othervalue2
Othervalue3
Updatedate

在第一个应用程序的前端,我只显示

CustomerID
Firstname
Lastname
DateOfBirth

从从数据层加载客户(可能会发生变化)并在中间层使用该客户然后在表示层(可能会发生变化)的角度来看,我如何正确实现 n 层应用程序?

我应该把 Customer 模型放在哪里?我需要不止一个吗?我在某处需要 ICustomer 接口(interface)吗?

项目详情该项目将由两个团队开发,一个位于美国,另一个位于东欧,将有四到五名团队成员。

有一个遗留的数据访问层,这个项目将不会使用。相反,我们将使用 Entity Framework 构建一个新的;我们需要设计和构建一个将在所有新应用程序中使用的数据层(对于这个应用程序,我们只需要客户表和一两个表)。其他项目会将其他表添加到该层。

我正在使用 DI 注入(inject) ICustomerRepository(参见 SO question)。但是会实现存储库和工作单元模式。

我关心的是适本地分离层。我们将在接下来的几个月中添加许多新项目,新数据层将快速增长。我们也在考虑在某个时候迁移到 Azure,所以我希望能够换出 Entity Framework 数据层,而不必重写业务和前端层。

最佳答案

您有一个数据模型(数据库架构)、一个域模型和一个 View 模型。

如果您的目标是解耦这些层,那么您应该在这三层中的每一层中使用不同的类来表示客户(但请参阅评论中的 the article @Joe mentions)。

您的数据访问技术将插入数据模型到领域模型的映射。如果您使用 Entity Framework ,它提供了在这两个模型之间进行映射的能力。

对于域模型到 View 模型的映射,请查看 Automapper用于域对象(例如业务对象)和 View 模型之间的映射。

更新

根据您的新信息,我将分享我会做什么。这当然不是唯一有效的方法。

对于分布式团队,明确的责任线很重要。不同时区、不同团队负责人的不同人员将处理代码。

考虑到新软件是在遗留数据库上构建的,您必须了解三个事实:

  • 更改遗留数据库以适应新软件的需求并不容易。
  • 新软件不应因现有数据库的结构而固有次优设计。
  • 您构建的下一个应用程序可能需要会影响当前应用程序设计的数据。

我会做以下事情

  • 创建代表旧数据库结构的数据传输对象 (DTO)。
  • 使用Repository and Unit of Work Patterns为业务对象层提供对 DTO 的访问。
  • 根据应用程序的需要设计业务对象层(中间层,其类通常称为实体)。不要污染基于 DTO 结构(最终是遗留数据库的结构)的对象设计。
  • 使用 Automapper 等技术来简化这两个层之间映射的管道工作。
  • 创建 UI 对象(在 MVC 术语中称为模型),代表给定 UI 屏幕(在 MVC 术语中称为 View )将处理的数据。
  • 根据 UI 模型与业务对象(实体)的紧密程度,您可能想要使用 Automapper,或者可能只想在自定义代码中填充它们。

同样,根据我的背景、经验和偏好,这就是我处理它的方式。这不是唯一有效的方法。

关于c# - C# 中的三层应用程序 - 放置数据和业务模型的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com