问题标签 [multi-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 投票
4 回答
10859 浏览

jakarta-ee - Java EE EIS 层

我一直在阅读 Java EE 架构,并且已经看到(至少在 Oracle 文档中)多次提到所谓的EIS(企业信息系统)层,它包括 Java EE 架构的第三(数据)层。

我知道在 3 层系统中,数据库通常是第 3 层。有时遗留系统也被放置在这一层,因为它们也直接与与业务中间件(第二层)相同的数据库进行交互,并且出于某种原因,它们不属于其他任何地方。

我的问题是:什么代码(如果有)属于第三“EIS”层?诸如 Hibernate 类和 DAO 之类的 ORM 代码?

在第二层,您同时运行系统和已编译的 Java。例如,您可能有一个运行您编写的一堆 WAR 的 Tomcat 服务器。我没有“得到”第三层的类比,在那里你有一个 RDBMS 和(我猜?!?!)一些与该 RDBMS 交互的代码。

总之,我想我想知道在 EIS 层中部署代码的标准/最佳实践是什么,以及这些部署是什么样的。提前致谢!

0 投票
2 回答
277 浏览

java - 跨 VM 分布层

尽管这是一个以 Java 为中心的问题,但它确实适用于任何使用多层架构的系统。

在 3 层架构中,通常有 3 层:

  • 客户端代码所在的客户端/表示层;
  • 业务逻辑所在的中间件层;
  • RDBMS 和其他数据密集型系统所在的数据/eis层

在 Java 领域,对于 Web 应用程序,这可能如下所示:

  • 一个应用服务器,例如同时GlassFish运行“Web 层”(WAR 构成 Web 应用程序中的客户端层)和“业务层”(EJB、中间件等);和
  • 包含数据层的 RDBMS 服务器

在虚拟化/集群环境中,这些应用程序(GlassFish、RBMBS,如 Oracle 或 PostgreSQL 等)将在 VM 上运行。

我的问题:在这些虚拟机之间分配/分布这个 3 层架构的标准方法是什么?意思是,以下任何一种“策略”都可能是可行的,但不是优先的:

  1. 一台同时运行 GlassFish 和 RDBMS(所有 3 层)的虚拟机(假设所有虚拟机都是 Ubuntu 服务器,因此成本/价格不考虑在内)
  2. 两个虚拟机:一个运行 GlassFish 的应用服务器虚拟机和一个运行 PostgreSQL 等数据库服务器虚拟机
  3. 三个虚拟机:两个应用服务器虚拟机都运行 GlassFish,但是 1 个 GlassFish 实例仅运行 WAR(Web 层),而第二个 FlassFish 实例运行中间件/业务逻辑;然后是第三个数据库服务器

显然,如果所有服务器(所有层)都在同一个 VM 上运行,它们可能会运行得更快或更高效,因为它们不会因网络延迟而陷入困境。但是它们会在同一个虚拟机上,这需要我需要大型硬件来支持它们。此设置可能还存在安全问题。

每个都有优点/缺点。我对哪些策略最能实现以下目标感兴趣:(1) 最大限度地提高吞吐量/速度,(2) 最适合集群/云环境,以及 (3) 最大限度地提高安全性。

提前致谢!

0 投票
1 回答
125 浏览

ejb - 业务层如何避免与会话相关的参数?

我有一个 Java EE 应用程序(简单的 Web GUI、一个大型 EJB 3 业务层、JPA),其大部分功能取决于当前登录的用户。

String userName正因为如此,EJB 被无所不在的参数所感染。您几乎找不到没有它的重要方法,并且它一直下降到最基本的 EJB。有时它由其他与会话相关的参数补充,例如用户的区域设置。

结果,参数列表增长并且代码清晰度受到影响。这可能是一个普遍的问题,如何避免呢?将更多代码推送到 GUI 客户端似乎是更疯狂的想法。

0 投票
1 回答
666 浏览

c# - 是否应该使用 DAL 访问应用程序的配置?

以下来自维基百科的定义解释了什么是多层应用程序中的数据访问层。

数据访问层 (DAL) 是计算机程序的一层,它提供对存储在某种持久性存储(例如数据库)中的数据的简化访问。

持久存储也可以包含一个或多个文件,但上层不知道我是如何组织文件中的信息的。假设我们有一个应用程序使用了一个配置文件,比如app.configor web.config:app.config文件中可能有一些参数的值(比如缓存的最大大小),所以这些值必须在应用程序启动时加载。此外,如果应用程序允许通过 UI 编辑这些参数,app.config则应更新文件。这些操作是DAL的一部分吗?

0 投票
1 回答
161 浏览

oop - 代表另一个类中的数据的中间类的名称

一个类是否有一个标准名称来表示另一个类,但要保持不同;

一个例子应该有助于说明:假设我的业务层可以访问一个类对象,例如 .NET 的 System.Diagnostics.Process,其中包含有关系统上运行的进程的大量信息。另一个项目,例如系统资源项目,对所有这些信息没有用处,因此在业务层中,我实现了一个 ProcessInfo 类,它只包含被认为重要的属性。

这种中间的、有代表性的班级有名字吗?

0 投票
1 回答
193 浏览

java - Google App Engine:编排多个应用程序以提供复合服务

据我所知,GAE 不允许您将不同的 Java 应用程序 (WAR) 上传到不同的实例,并使它们都成为同一个“GAE 应用程序”的一部分。

但是,如果有一个模块化的架构会很好,我有一个主要的 Web 应用程序和多个其他应用程序来帮助主要的应用程序完成它的工作。例如,一个监控应用程序,如果在主应用程序中发生重大事件,它会发送电子邮件警报。一个具有通用输入验证和编码服务的安全应用程序,主应用程序以及未来的其他应用程序都可以使用这些服务。

关键是要有一个已部署的 GAE 应用程序的完整架构,但只有其中一个是最终用户与之交互的“主要应用程序”。而且,我并不是要“欺骗”GAE,因为无论我是否将所有内容都放在一个单一应用程序中,或者是否将所有内容解耦到许多较小的应用程序中,传入/传出带宽都是相同的。他们照样向我收费。

问题是我记得在某处读过 GAE 不鼓励(甚至可能禁止)这种用法。我刚刚通读了服务条款,在任何地方都找不到这些限制,但是如果它不允许,我不想承诺构建一个解耦架构!

有谁知道我是否可以进行这种设置,以及这里对开发人员施加了哪些限制/约束(如果有)?提前致谢!

0 投票
3 回答
1815 浏览

c# - 多层命名

我想创建一个具有 3 层(或层?有什么区别?)的多层项目

现在,我应该如何命名每一层(层)?

我在维基百科上看到了这样的描述:

维基百科三层架构

但我不能简单地将我的层命名为“表示层”、“逻辑层”和“数据层”,可以吗?

这在命名空间中并不合适。

对命名有什么想法吗?

0 投票
3 回答
5785 浏览

delphi - DataSnap 是否针对同时响应超过 1000 个用户进行了优化?

我们想启动一个大型的多层应用程序。服务器端应用程序必须同时响应 1000 多个用户。我们想通过 64 位编译器和 32 位客户端创建服务器应用程序。在这种情况下,我们不知道 DataSnap 是否可以毫无问题地响应所有客户端?在这种情况下,服务器计算机非常强大(多处理器和超过 16GB 的 RAM),数据库管理系统是 FireBird 2.5。

0 投票
1 回答
827 浏览

ssl - 在大量机器上更新 SSL 证书

我在客户端-服务器应用程序中使用 SSL 证书;客户端和服务器都使用 2 个即将过期的证书。通常,您只需用新证书替换证书,但这不能立即发生,因为客户数量众多。因此,如果仅更新服务器和部分客户端,则其余客户端将无法再进行身份验证。

一个快速的解决方法是用一个简单地忽略证书到期日期的版本替换二进制文件;客户端的更新可以按顺序进行,只要在证书到期之前完成即可。

我想到的长期解决方案:

  1. 使用 Puppet 在客户端推送新证书

    • 不幸的是,不可行,因为并非所有客户端都/将通过 Puppet 进行管理
  2. 使用第二组证书

    • 如果第一组已过期,请使用第二组
    • 这样,服务器将拥有新证书,部分客户端将拥有新证书,其余客户端将拥有旧证书,但一切正常
  3. 如果当前证书已过期,客户端将向服务器请求新证书。

还有其他解决方案吗?

0 投票
3 回答
3883 浏览

c# - 连接字符串 - N 层应用程序

我一直在寻找这个问题的答案,但之前提出的所有问题似乎都是一个复杂的变体,并且没有回答这个问题,所以我想我应该问一下。

我正在开发具有以下内容的三层应用程序......

  • DAL - 使用实体框架的数据访问层
  • BLL - 业务逻辑层
  • Web 应用程序 - MVC Web 应用程序

我创建了一个实体框架模型、存储库类,我的连接字符串在 DAL App.Config 文件中。我现在已经在 BLL 中创建了我的第一个类,它引用了 DAL。在尝试测试以下非常基本的方法时,我收到与 BLL 中缺少连接字符串有关的错误。

为什么 BLL 寻找连接字符串?我在这里错过了一些非常明显的东西吗?

如果我需要跨多个层包含连接字符串,这违背了 n 层结构的目的,那么最好的方法是什么?任何人都可以为我阐明这一点吗?