问题标签 [application-design]

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 投票
5 回答
1609 浏览

php - 我应该在发送之前在数据库中排队电子邮件,而不是即时发送吗?

我正在开发一个网站,在某些事件/用户操作(在照片中标记、添加为朋友等)之后向用户发送电子邮件通知

根据我的经验,从 Web 服务器发送电子邮件可能会很慢。例如,在创建新用户时,我将发送一封电子邮件以确认/欢迎该帐户。但是,有时会在页面完成发送电子邮件时等待页面加载的短暂暂停。

我担心的是,如果我在连接到邮件服务器时遇到问题或邮件服务器超载,它将成为我的应用程序/页面加载的瓶颈

所以我的问题是,从一致发送电子邮件的 Web 应用程序发送电子邮件的最佳方式是什么?

我是否应该通过将电子邮件内容存储在数据库中来创建队列系统,然后运行预定的 cron 作业来处理所有未送达的电子邮件?

还是应该在用户完成操作/事件(创建会员帐户、在照片中添加标签等)后直接发送电子邮件?

0 投票
3 回答
21909 浏览

java - Hibernate 延迟加载应用程序设计

我倾向于将HibernateSpring框架结合使用,它具有声明性事务划分功能(例如,@Transactional)。

众所周知,hibernate 尽可能做到非侵入性透明性,但是在使用关系时这被证明更具挑战性。lazy-loaded


我看到了许多具有不同透明度的设计替代方案。

  1. 使关系不延迟加载(例如,fetchType=FetchType.EAGER)
    • 这违反了延迟加载的整个想法..
  2. 使用初始化集合Hibernate.initialize(proxyObj);
    • 这意味着与 DAO 的耦合度相对较高
    • 虽然我们可以用 定义一个接口initialize,但不保证其他实现提供任何等价物。
  3. 将事务行为添加到持久Model对象本身(使用动态代理@Transactional
    • 我没有尝试过动态代理方法,尽管我似乎从来没有让@Transactional 处理持久对象本身。可能是由于休眠是在代理上的操作。
    • 交易实际发生时失去控制
  4. 提供惰性/非惰性 API,例如,loadData()loadDataWithDeps()
    • 强制应用程序知道何时使用哪个例程,再次紧耦合
    • 方法溢出, loadDataWithA(), ....,loadDataWithX()
  5. 强制查找依赖项,例如,仅提供byId()操作
    • 需要很多非面向对象的例程,例如,findZzzById(zid)然后getYyyIds(zid)代替z.getY()
    • 如果事务之间的处理开销很大,则一个接一个地获取集合中的每个对象会很有用。
  6. 成为应用程序的一部分@Transactional 而不仅仅是DAO
    • 嵌套事务的可能考虑因素
    • 需要适合事务管理的例程(例如,足够小)
    • 小程序影响,虽然可能导致大笔交易
  7. 为 DAO 提供动态获取配置文件,例如,loadData(id, fetchProfile);
    • 应用程序必须知道何时使用哪个配置文件
  8. AoP 类型的事务,例如,拦截操作并在必要时执行事务
    • 需要字节码操作或代理使用
    • 执行交易时失去控制
    • 黑魔法,一如既往:)

我错过了任何选择吗?


lazy-loaded在尝试将关系对应用程序设计的影响降至最低时,您首选哪种方法?

(哦,对不起WoT

0 投票
1 回答
3759 浏览

node.js - 使用 Node.JS

昨晚我转储 Windows 7 并格式化我的硬盘驱动程序以移植到基于 Linux 的操作系统,纯粹是因为我想开始使用Node.JS

所以我安装了Node.JS并做了一些测试,http 服务器和套接字等。

我想做的是构建一个与 MVC 框架紧密集成的 HTTP 服务器,但在开始之前我需要学习如何在 Node.js 中高效构建。

例如,在作为我的框架的 PHP 中,我将创建一个引导加载系统来加载所有基类等,然后我将启动我的事件系统以准备开始附加回调。

我将继续处理请求等,直到生成输出,然后将其发送到将处理标头等的输出处理程序

但是 Node 是一个全新的环境,我想知道在 Node.js 中构建系统的最佳实践。

我正在寻找的信息更多地与设计结构有关,而不是应用程序的实际编码、如何加载库、在哪里加载库等

任何帮助表示赞赏。


到目前为止,我的 WebApplication 进展顺利,我已经非常传统地构建了我的应用程序,并且有点程序化。

我开始的是创建一个像这样的目录结构:

这个目录结构就像大多数基于 MVC 的 Web 应用程序一样,所以使用这种方法我感觉很舒服。

启动文件是以节点为入口点执行的文件,node startup &如下所示:

init 文件是主要工作,它告诉系统的所有其他区域运行、停止等。

我在 libs 中有一个名为的文件serverhandler.js,,这是 init.js 所必需的,然后我创建了一个服务器并将回调分配给ServerHandler.Listener. 然后谁监听请求,检查文件是否存在于公共目录中,如果存在,则读取块并发回。

如果没有在公共场合找到文件,它将使用 Route.Create("/path?params"); 创建一个路由。它阻止了 uri 中的 3 个元素,Controller、Method、Params,然后加载控制器文件(如果存在)。

我采取了抛出错误页面的方法,如下所示:

希望这可以帮助一些人开始使用 Node.js。

0 投票
2 回答
555 浏览

database - 多语言应用的数据库设计问题

我们正在开发一个旅行门户,对于一个旅行门户,它的内容和细节是核心。我们计划在多个语言环境中使用它,因此这意味着我们需要处理每个语言环境的动态数据。

目前我们有以下表格

每个表都包含很多字段,例如

以及许多其他可能包含大量数据的字段,我们需要以特定于语言环境的方式处理数据。

我不确定我们如何最好地设计一个应用程序来处理这种情况,我想到的一件事就是在每个表中为每个语言环境添加额外的列,但这意味着对于新的语言环境,需要从数据库更改为代码级别这一点都不好。

由于每个表都包含很多列,这些列可以包含符合国际化条件的数据,所以我的问题是处理这种情况的最佳方法是什么

编辑1 在做了一些分析和一些观察之后,我想到的一种方法如下..

我打算为每个表创建一个翻译表,比如目的地我有以下设计

欢迎对上述方法提出任何有价值的建议......

0 投票
2 回答
2993 浏览

php - 通过数据库或平面文件进行本地化?

对于多语言 PHP 应用程序,假设标签/短语将被翻译成多种语言。这些标签可以放置在特定语言的文件中(例如,每种语言一个文件),也可以加载到数据库中,以便应用程序可以在需要时访问它们。

问题是,从性能的角度来看,更好的方法是什么?

在我看来,如果标签在数据库中,则加载的数据更少(我只能请求单个页面所需的标签),并且可以更轻松地构建用于翻译的管理工具。但是,似乎许多应用程序和框架都为此目的使用平面文件(例如 phpMyAdmin、CakePHP 等)。

0 投票
1 回答
262 浏览

django - 半静态数据设计题

我正在设计一个将在 Django 中开发的项目,我有一个设计哲学问题。在我的应用程序中,我需要跟踪本周的信息。这与NFL(1-17)中的当前周相关,可以根据系统中的其他模型(例如时间表和当前日期)进行计算。由于此信息每周更新一次,并且会在应用程序中经常使用,因此将这些信息存储在自己的模型(数据库表)中并每周运行更新是否有意义?
还有其他可能对存储有用的信息(本周第一场和最后一场比赛的日期/时间),因此即使可以计算数据,“当前周信息”之类的模型也适用于此在飞行中?

0 投票
1 回答
96 浏览

php - 在 php 代码替代方案中存储数据库 pk ID?

我们有数十万个查找值,并且由于产品仍处于开发阶段,因此 ID 不固定。因此,无论何时更新 ID,我们都必须返回并更新整个代码中的数千个 ID,以使其正常工作。它会按时吃掉。

是否有另一种方法可以在代码中保持 ID 为动态的:它们会随着表中 ID 的更改而自动更新,或者它们都存储在所有数据库表的 1 个文件中,因此它使开发和测试的更新更加容易和快捷看法?

平台是 Mysq + codeignitor php。

0 投票
2 回答
1350 浏览

c# - 数据库设计 - 帮助台应用程序

我无法决定是否将帮助台应用程序与其他公司应用程序保存在同一数据库中或将其完全分开。

帮助台应用程序可以记录来自电话、电子邮件、网站的支持请求。

我们也可以收到注册客户和非注册客户发送给我们的问题。

将帮助台应用程序保留在同一个数据库中的唯一原因是我们可以共享用户群。但话又说回来,我们可以让用户创建一个新帐户以获得支持或将用户帐户与帮助台应用程序同步。

如果我们分离帮助台应用程序,我们的数据库备份也会更小。或者只是将帮助台应用程序保留在同一个数据库中,这使得开发/集成总体上更容易,也只备份 1 个数据库。(可能更大但仍然有 1 个数据库)

你会怎么做?

0 投票
2 回答
144 浏览

design-patterns - 设计应用程序的最佳方式

我有一个具有不同角色的多个用户的应用程序。每个用户对资源的访问受到他所拥有的角色的限制。

现在,如果我正在构建一个应用程序来管理这些资源,我应该如何构建我的应用程序。

角色:管理员、版主、作者资源:文章

我看到两个选项。

1:为每个角色创建单独的模块,并授予对角色资源的访问权限,例如:管理员/ -添加/编辑/删除文章 -添加/编辑/删除用户作者/ -添加/编辑/删除自己的文章版主/ -编辑文章

2:为每个资源创建单独的模块,并根据访问它们的用户的角色授予对它们的访问权限。eg:
articles/add/edit/delete [根据用户角色管理操作]

语言是 PHP,我将使用 Zend 框架。我的问题不在于访问权限,因为 Zend 的 ACL 组件会处理它。我的问题是应用程序的组织。

例如,如果引入了一个新用户,在第一种情况下,我将不得不创建一个新模块。但是在第二种方法的情况下,我将不得不更新每个模块。

很明显,第一种方法将涉及更多的文件和不太复杂的逻辑,第二种方法将需要更复杂的逻辑,但我只是不确定要遵循哪个并寻求建议。任何帮助表示赞赏。

谢谢。

0 投票
5 回答
3390 浏览

c# - 用户的账户余额应该存储在数据库中还是动态计算?

用户的账户余额应该存储在数据库中还是动态计算?

为了获得准确的结果,动态计算它是有意义的,但是当有很多用户并且数据库变得非常大时,这可能是一个问题?

交易

  • 身份证号(PK)
  • 帐户ID
  • 类型
  • 约会时间
  • 数量
  • 等等……等等……

账户余额

  • 交易 ID (PK/FK)
  • 余额