问题标签 [three-tier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2751 浏览

c# - 如何将在任何文件夹中创建的命名空间访问到 C# 代码后面

我在我的网站中创建了一个文件夹 asp.net C# usindg VS'10 ,,

现在我在该文件夹中添加了一个类,其命名空间如下:

}

我想将此名称空间用于文件后面的代码中,因为我试图将名称空间包含在语句中:

但问题是它不允许我添加这个命名空间,即使它没有显示在智能中。

帮我解决这个问题。

下面是我的项目层次结构的屏幕截图:

在此处输入图像描述

0 投票
1 回答
163 浏览

java - MVC 模式与三层 - 逻辑属于哪里?

我试图在我的网站编码中引入一些好的实践,所以我开始研究 MVC,因为它是网站设计中的一个流行词 :-) 我对 MVC 模式感到困惑。我习惯于思考三层模式,你有 3 层:

  • 介绍
  • 逻辑
  • 数据

有两件事让我对 MVC 感到困惑:

  1. “模型”组件通常表现为上面的数据层(数据库抽象)。但是“高级”逻辑属于哪里?就像决定你将如何处理数据以及如何处理、检查权限等。有时我在控制器中看到了一些这样的内容,但让我决定哪个属于哪里真的很困惑。

  2. MVC 模式表示为一个由 3 个组件组成的圆圈,它们相互发送消息,例如 M -> V、V -> C、C -> M,反之亦然。我完全理解三层设计,其中一层调用自身下面的层,但不是相反!你的编程语言中的函数可以调用其他函数(你可以称之为“发送消息”)——但它是一个面向树形图。但是下层,或者说,被调用函数如何“发送消息”或“通知”调用函数呢?

也许我对 MVC 模式太关心了,可以愉快地坚持我的三层设计吗?无论如何,我想了解 MVC 模式,至少看看它是否值得我使用。

0 投票
1 回答
185 浏览

sql-server - ComboBox 显示 System.Data.DataRow (MVC)

我的 Combobox 没有显示我的 SQL 属性“TimeBlock”中的值,而是显示 System.Data.DataRow 5 次。我的代码有什么问题?

代码:

我想显示“TimeBlock”中存储的内容,而不是 5 System.Data.DataRow。“SELECT TimeBlock From TimePeriod GROUP BY TimeBlock”显示:“08-00 - 10:00”“10:00 - 12:00”“12:00 - 14:00”“14:00 - 16:00”“16: 00 - 18:00"

我该如何解决这个问题?

谢谢

0 投票
1 回答
96 浏览

c# - 在继承的 N 层应用程序中寻找答案

我继承了一个 n 层应用程序,我想对它的文件分组方式进行一些解释。

我猜 BAL 是业务访问层 DAL 是数据访问层

EAL有什么猜测吗?有人知道EAL是什么吗?

另外,为什么 BAL 中的文件名内容与 DAL 相同? 在此处输入图像描述

0 投票
1 回答
280 浏览

design-patterns - 模型在 3 层架构中的位置

我正在研究 3 层架构,但我遇到了一个我似乎无法真正找到解决方案的问题。尽管网上有很多关于三层架构的文章,但都没有提到数据模型。除了在 MVC 的上下文中。

我有以下架构: 在此处输入图像描述

所以我们在这里看到的是每一层都使用了数据模型。假设我有一个订阅的新用户:

所以有效地所有层都有这个数据模型的概念。我想知道这是否真的是重点?

相反,假设我想解决这个问题,我可以让 UI 将“原始”数据(即字符串格式的用户值)传递给应用程序层。应用层将是唯一具有 UserModel 概念的层。因此,它将UserModel使用此数据创建。在没有模型概念的数据库层的情况下,我将如何继续将其传递给数据库层是很棘手的。所以我不知道该怎么做。

简而言之,我很困惑。任何帮助是极大的赞赏。

0 投票
1 回答
96 浏览

asp.net - 三层架构和控制器

对于我的应用程序,我使用了三层架构,具有服务/表示层、业务层和数据层。现在我想使用 web api(没有 MVC,只有控制器)。然后我想使用像服务这样的控制器,并维护业务和数据层。但通常控制器逻辑与输出和 html 中的模型相关联。另一种解决方案是使用使用服务层的控制器来制作应用程序所需的内容。在这种情况下,控制器充当 html 上的模型和平板电脑或其他设备可以使用的服务之间的中介。

在这些情况下使用哪种软件架构?

0 投票
2 回答
1220 浏览

c# - 开发三层和两层的应用程序

据我了解,我们可以说 3 层架构意味着每个关注点的单独项目。那些 UI 层、业务层和数据层。UI 与 BL 对话,BL 与 DB 对话,反之亦然。这有利于可维护性,并且关注点分离的想法是合理的。但另一方面,层与层不同。也就是说,层与机器/网络直接相关。我的意思是当我们说 2 层时,它通常是客户端机器和数据库服务器机器。当我们说 3 层时,一般是客户端机器、应用服务器机器和数据库服务器机器。因此,根据这些信息,开发使用 3 层架构的两层应用程序是可能的。

到目前为止,我已经使用了 3 层,但现在是时候决定我们应该使用 3 层还是 2 层进行开发了。现场将有 windows 窗体项目,大约 150 个客户端和 100 个手持终端将使用 windows 窗体项目并通过 Web 服务进行通信。在手持终端中,显然最好的解决方案是使用三层,但是对于将在 Windows 7 上运行的 Windows 客户端,我们很难决定是通过一台应用服务器与数据库通信还是直接连接到数据库。

这里的主要问题是 3 层架构比 2 层有什么好处。对我来说,多一层意味着多一台服务器/主机/机器需要一直启动并运行,这可能是开销。

请指导我们选择最佳层架构。

0 投票
1 回答
676 浏览

unit-testing - 单元测试 BLL:模拟存储库、UnitOfWork、UnitOfWorkFactory

我需要快速开始测试我的业务层上的方法。考虑 Materials BLL 对象,我如何测试 AddNewMaterial 方法呢?

我正在使用 Moq 和 XUnit,但我很环保。一般来说,我想这样做:

  1. 模拟存储库的 Add 方法。
  2. 模拟 UoW Materials 属性以返回我的存储库模拟。
  3. 模拟 UoWFactory 以返回 UoW 模拟。
  4. 创建 MaterialsBLL,将模拟的 UoWFactory 提供给构造函数。
  5. 验证 AddNewMaterials 调用存储库的 Add,以及 UoW 的 Save 等。

在我看来,我也许应该创建一个 Fake MaterialRepository,而不是嘲笑它?还有什么建议吗?这是第一次破解:

0 投票
3 回答
1069 浏览

c# - 从 EDMX 分离实体类 (DTO) 的实用方法

我有一个 3 层应用程序

DAL 有 EDMX 文件,EF6 从数据库自动生成它(DB First 模式)。我也有 BLL 和 UL 层。

但是,当我想在 UI 中使用 BLL 方法时,我必须将 DAL 程序集添加到 UI 层(因为方法的返回类型)

人在 EDMX (DAL) 中定义] (这是我的问题)

如何从 EDMX 文件中分离类 (DTO) 并创建为单独的程序集?

如何防止将 DAL 程序集(整个 EDMX)添加到 UI 层?

0 投票
4 回答
1564 浏览

c# - 通过 JSON 序列化复杂的 EF 模型

我已经做了很多搜索和试验,但一直无法找到解决这个问题的可行方法。

环境/工具

  • 视觉工作室 2013
  • C#
  • 三层网络应用程序:
    • 数据库层: SQL Server 2012
    • 中间层: Entity Framework 6.* 使用 Database First,Web API 2.*
    • 表示层: MVC 5 w/Razor、Bootstrap、jQuery 等。

背景

我正在为需要严格的三层架构的客户端构建一个 Web 应用程序。具体来说,表示层必须通过 Web 服务执行所有数据访问。表示层不能直接访问数据库。该应用程序允许一小部分付费员工管理人员、等候名单和他们正在等待的资源。根据需求,数据模型/数据库设计完全以人(用户表)为中心。

问题

当表示层请求某些东西时,比如资源,它至少与一个用户相关,而用户又与其他一些表相关,比如角色,这些表与更多用户相关,这些用户与更多角色和其他相关事物。关键是,当我查询 EF 想要引入的几乎整个数据库的任何内容时。

由于 EF 的默认延迟加载行为,这通常是可以的,但是当将任何对象序列化为 JSON 以返回到表示层时,Newtonsoft.Json 序列化程序会挂起很长时间,然后引发堆栈错误。

我试过的

这是我到目前为止所尝试的:

  1. 将 Newtonsoft 的 JSON 串行器 ReferenceLoopHandling 设置设置为 Ignore。没运气。这不是循环图问题,它只是引入的大量数据(有超过 20,000 个用户)。

  2. 清除/重置不需要的集合并将引用属性设置为 null。这显示了一些希望,但我无法绕过 Entity Framework 跟踪所有内容的愿望。

    • 只需将导航属性设置为 null/clear 会导致这些更改在下一个 .SaveChanges() 上保存回数据库(注意:这是一个假设,但看起来很合理。如果有人知道不同,请说出来)。

    • 分离实体会导致 EF 自动清除所有集合并将所有引用属性设置为 null,无论我是否想要它。

    • 对所有内容使用 .AsNotTracking() 会引发一些关于不允许非跟踪实体具有导航属性的异常(我不记得确切的细节)。

  3. 使用 AutoMapper 制作对象图的副本,仅包括我指定的相关对象。这种方法基本上是有效的,但在(我相信)执行自动映射的过程中,所有导航属性都被访问,导致 EF 查询和解决它们。在一种情况下,这会在对 Web 服务的单个请求期间导致近 300,000 次数据库调用。

我在寻找什么

简而言之,之前有没有人必须解决这个问题并提出一个有效的解决方案?

缺乏这一点,任何关于至少在哪里寻找如何处理这个问题的指针都将不胜感激。

附加说明:当我写这篇文章时,我想到我可以将上面的第二项和第三项结合起来。换句话说,设置/清除导航属性,然后将图形自动映射到新对象,然后分离所有内容以使其不会被保存(或者可能将其包装在事务中并在最后回滚)。但是,如果有更优雅的解决方案,我宁愿使用它。

谢谢,戴夫