问题标签 [n-tier-architecture]

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 投票
1 回答
534 浏览

code-generation - 手动编写业务对象还是使用 DAL 对象?

假设您有三层(带有命名空间):

  • 用户界面 ( App.UI) - 调用业务层流程并使用对象进行通信
  • 业务层 ( App.Core) - 使用对象编排流程并使用 DAL 层
  • DAL ( App.Data) - 直接操作存储和持久化对象

假设您有 User 表,因此反映在您的 DAL 层中,App.Data.User并且可能也反映在App.Data.Users.

您的 UI 中有一个显示应用程序用户的视图。

要真正拥有一个分离(分层)的应用程序,您还应该拥有App.Core.User并且App.Core.Users可能必须手动创建。

最好的解决方案(在我看来)当然是:应该有第四层业务对象(App.Objects,其中包含类App.Objects.UserApp.Objects.Users. 这些 POCO 将在所有层之间共享。业务层只允许使用 DAL,UI 只允许使用 BL,但它们都将App.Objects用于公共对象模型。

Asp.net MVC 模板暗示直接在视图上使用 DAL 对象,LINQ 2 实体本身也不创建任何 POCO...

那么当使用任何自动代码生成时,我们应该使用 DAL 对象还是手动硬编码我们共享的 POCO?第一部分似乎是一个简单的出路,但没有将 DAL 与 UI 分开(以后可能会有安全性和可伸缩性问题),第二部分容易出错并且对于中等大小的数据库非常乏味。

你有什么建议?

0 投票
5 回答
828 浏览

asp.net - 将 HTML 编码添加到业务层

将用户输入添加到网页时,它应该(当然,除非它是 HTML :) 被编码以帮助防止 XSS 攻击等。像这样:

我正在组合一个模板来生成我的业务逻辑层,并且我正在考虑在数据从数据库中出来后,在它到达 UI 代码之前使用它来完成所有编码。这将确保所有内容都经过编码(我显然会排除包含 Xhtml/Xml 字符串的列)。数据访问方法的重载将允许检索没有编码的数据(因此可以对其进行编辑):

这是其他人使用的方法,还是一个愚蠢的想法?优缺点都有什么?

谢谢。

0 投票
2 回答
681 浏览

subsonic - 亚音速:小丑的等级

我使用 Subsonic 生成了一个不错的 DAL。有没有办法可以为 BLL 生成骨架?我不想将 SS 层直接插入我的 GUI。

我已经在两个 SS 论坛中跋涉,似乎每个人都SSS 生成的层称为 DAL,但他们其用作 BLL。

您是否使用过 SS 并将 DAL 和 BLL 层分开,而无需从头开始手动编码 BLL?

0 投票
4 回答
589 浏览

subsonic - 亚音速:把我带到层级

这是一个令人尴尬的基本 n 层问题。

我在 VS2008 中使用亚音速创建了一个 DAL 项目。它有一个小部件类、一个小部件集合类和一个小部件控制器类。

我创建了引用它的业务逻辑项目(不,我不能把它放在同一层)。使用特定的业务标准,它在返回小部件集合的函数中选择小部件集合。

我的问题是:我的 GUI 层如何将集合绑定到网格?我知道小部件集合是数据网格的有效数据源,但是GUI 层如何知道小部件和小部件集合是什么?当然,我不必从 GUI 中引用 DAL,这否定了整个观点。

0 投票
7 回答
462 浏览

c# - OO 设计与数据库设计

假设我正在用 C# 为产品分销商开发应用程序。

分销商执行以下 3 种类型的交易:

(1) 缩进

(2) 卖出

(3) 库存

我正在设计我的课程如下:

现在如果我想将这三种类型的信息保存在三个单独的表中,那么我应该如何设计我的 DA 层?

我应该建立单独的DA类吗?

还是单个类TransactionDA并通过使用as/is运算符检查其类型来执行 CRUD 操作?

或者我还能做什么?有什么建议么?

0 投票
4 回答
435 浏览

.net - 表示层引用数据层

我有一个 3 层的 .NET 2.0 应用程序。表示层引用中间层。中间层引用数据库层。出于某种原因,当我编译时,数据层的 dll 出现在表示层的 bin 中。我该如何阻止这个?

0 投票
4 回答
665 浏览

asp.net - 将单元测试缓慢集成到项目中的步骤

我目前正在与另一名合作学生一起完成一个即将完成的项目的合作项目。由于该项目已从合作社传递到合作社,因此沿途采取了不良做法,并将测试留到最后。我决定写单元测试来在测试时学习新东西。

但是,我正在开发一个 3 层、紧密耦合的应用程序,它似乎无法以当前形式进行单元测试。我不想通过一夜之间重构无法识别的代码来甩掉其他对这些概念一无所知的合作学生。那么我应该采取哪些步骤来慢慢地将代码拉向单元可测试性呢?我应该先实现一个工厂模式,然后让其他学生熟悉它,然后再继续前进吗?

如果我的知识有缺陷并且不应该有任何问题,我深表歉意。我是新手:)

0 投票
4 回答
406 浏览

asp.net - 您将如何交换连接字符串以访问测试数据库以进行单元测试?

我已经设置了一个测试数据库来开始对我最近添加到的应用程序进行单元测试。这是一个 3 层设计(表示层、BOL 和 DAL),这是我第一次编写单元测试。

我决定从 BOL 开始,我认为最好的方法是用指向我的新测试数据库的连接字符串(它已作为共享字符串传递)换掉。但是,我不想更改任何生产代码。我只是希望在单元测试期间以某种方式将应用程序重定向到测试数据库。我该怎么做呢?

0 投票
2 回答
273 浏览

asp.net-mvc - 在 ASP.NET MVC 中自动将控制器包装在服务周围

问题标题可能不清楚,但我想做的是这样的:

这就是我如何分层我的应用程序

应用程序域应用程序服务应用程序Web

我想要的是,如果我请求类似的东西/api/OrderProcessor/GetAllOrder,它将GetAllOrderApp.Services.OrderProcessorService.

该方法将返回一个IList<Order>,我希望它根据某种格式(我实际上使用 ExtJS)序列化为 JSON,可能类似于:

我可以继续将服务作为控制器,但我不希望服务层被表示材料污染。

我该如何制作这样的包装控制器?

我不想在 Service 类本身上附加任何属性,如果我可以使用 IoC 配置它可能会很好,可能稍后我希望输出是 XML 或者可能使用 DTO 类而不是原始域类。

任何想法?

0 投票
2 回答
586 浏览

asp.net - n 层架构中的 SqlCacheDependency

我读了一些关于 SqlCacheDependency 的文章。我认为这是更新缓存的一种非常酷的方式,但如果我的应用程序是 n 层架构,我不确定如何处理这项技术。

如果我的程序是一个小型 web 应用程序,这是否有用,或者还有一种方法可以用于大型 n 层架构?