三层架构 MVC 4 项目

3-Tier Architecture MVC 4 Project

我正在使用 ASP.Net MVC 4 3 层架构开发 Web 应用程序,但我遇到了某些问题。我知道这里存在类似的线程,但 none 已经足够清楚了。我已经创建了所需的层,它们是 UI(MVC4 项目)、BLL- 业务逻辑层(库 class)、BOL- 业务对象层(包含 [=35 的库 class =]) 和 DAL- 数据访问层(库 class)。 图层依赖关系如下:

如果我在以下内容中有错误,希望您能纠正我。 BOL 是主参考层,它与 DAL 交换原始 dB 记录,然后将它们发送到 BLL,BLL 负责任何逻辑计算,然后获取更新的记录并将它们发送到 UI 中的控制器。

了解以上内容,

  1. 我们应该把 CRUD 函数放在哪里?
  2. 我们应该在哪里以及为什么要创建一个 class 来声明(加上设置和获取)有用的数据库字段?
  3. 我们到底应该在ViewModel文件夹中放什么?换句话说,因为我们已经在上一步和实体中定义了变量,那么它是否添加任何值来保留模型文件夹?

提前致谢。

在这些问题上不可能是明确的正确答案,因此任何答案都应仅作为意见进行评估。以下是我的回答:

  1. 我们应该把CRUD功能放在什么地方? CRUD是不同层次的频繁模式。高级 Repository 提供类似的方法,作为低级 Table Gateway.

  2. 我们应该在哪里以及为什么要创建一个 class 来声明(加上设置和获取)有用的数据库字段? 这些 classes 通常是简单的 Data Transfer Objects (DTO) 或稍微复杂一点的 Active Records。根据 Dependency Inversion Principle,这些 classes 的接口应提供业务逻辑层,而实现应提供数据访问层。由于 DTO 非常简单 classes,因此可以提供它们 "as is" 而无需 interface/implementation 分离。

  3. 我们到底应该在ViewModel文件夹中放什么;换句话说,既然我们已经在上一步和实体中定义了变量,那么它是否会添加任何值来保留模型文件夹? 理论上实体应该是我们的模型;但在实践中,情况往往并非如此。 F.e。 in ASP.NET MVC模型不仅要提供下拉字段的值,还要提供所有可能的值;所以它需要单独的模型 class.

结果可能是您在应用程序的不同级别有三个或四个非常相似的 classes。当然,这不是很好,所以Aspect编程可能适用于这种情况。