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

c# - 软件设计和网络服务设计

我即将设计我的 Web 服务 API,我的 API 的大部分功能基本上与我的 Web 应用程序非常相似。

现在的问题是,我应该创建 1 个单一方法并将它们用于 Web 应用程序和 Web 服务 api 吗?(这似乎是合乎逻辑的解决方案,但它非常复杂;复制 Web 应用程序使用的方法要容易得多,并将两者分开,即一种方法用于 Web 应用程序,一种方法用于 Web 服务。)

你们是怎么做到的?

1)重用:一种主要方法,并将它们重用于Web应用程序和Web服务应用程序(我喜欢这个,但它很复杂)

  • WebAppMethodX --uses--> COMMONFUNCTIONMETHOD_X
  • APIMethodX ---使用----> COMMONFUNCTIONMETHOD_X

即 Commonfunctionmethod_x 包含可重用的通用特性集

PRO:更少的代码,更少的维护,更少的错误。

缺点:非常复杂

2) DUPLICATE:两种方法,一种用于Web 应用程序,一种用于Web 服务。

  • WebAppMethodX
  • API方法X

优点:简单

缺点:重复 = 更多代码、更多维护、更多错误!

0 投票
1 回答
1360 浏览

php - PHP Frontpage/页面控制器

我使用以下作为 Frontpage/Page Controller(s),到目前为止它工作正常,除了我面临的两个问题,如你所见,$pages 数组和开关实际上比我的那个长得多'已经粘贴在这里。每次需要新的页面控制器时,我都必须将其添加到 $pages 数组并进行切换,这会使该列表非常长。您将如何克服这个问题,您是否看到此代码有任何其他改进?loadLogic()在页面控制器中,它用于获取 pages/controllername/logic/function.php 下的函数。

Frontpage 控制器 - index.php:

页面控制器 - {home,register,login,logout,page1,page2,page3}.php:

函数加载逻辑():

文件夹结构:

0 投票
3 回答
469 浏览

design-patterns - 在这个问题中我应该使用什么设计模式?

坦率地说,这是一个家庭作业问题,所以我会告诉你我的意见。你能让我知道我的错误而不是给我解决方案吗?

这是问题:

假设一家餐厅只提供以下两种餐点:(a)全餐和(b)经济餐。正餐由以下食物组成,按以下顺序供应: 1. 开胃菜 2. 饮料 3. 主菜 4. 甜点 同时经济餐由以下食物组成,按以下顺序供应: 1.饮料 2. 主菜

确定最合适的设计模式,该模式可用于允许客户仅使用所提供的两种餐食中的一种进行订购,并且餐食成分必须按给定的顺序提供。

我对工厂和迭代器感到困惑,并将它们一起使用。使用工厂模式,我们可以创建完整且经济的两餐,并为用户提供将决定的基础对象类。但是我们如何才能强制元素的顺序,我想到了使用迭代器来遍历两个创建的工厂的组合。

你怎么看?

0 投票
2 回答
355 浏览

java - 软件和游戏模板是如何设计的?

请不要介意我的问题,因为我对软件不太了解,因为我是从网络角度来的。例如,在 web css 中用于设计和外观

所以..

如何为使用 c++ 和 java 等程序制作的软件和游戏创建设计、模板和环境?

它们是用相同的语言设计的吗?

0 投票
3 回答
1475 浏览

jit - 即时编译总是更快?

向 Stack Overflow 上的所有编译器设计者致敬。

我目前正在从事一个项目,该项目专注于开发一种用于高性能计算的新脚本语言。源代码首先被编译成字节码表示。字节码然后由运行时加载,运行时对其执行积极的(并且可能是耗时的)优化(这比大多数“提前”编译器所做的更进一步,毕竟这是整个问题的重点项目)。请记住,此过程的结果仍然是字节码。

然后在虚拟机上运行字节码。目前,该虚拟机是使用直接跳转表和消息泵实现的。虚拟机使用指针遍历字节码,加载指针下的指令,在跳转表中查找指令处理程序并跳转到其中。指令处理程序执行适当的操作并最终将控制权返回给消息循环。虚拟机的指令指针递增,整个过程重新开始。我用这种方法所能达到的性能实际上是相当惊人的。当然,实际指令处理程序的代码再次手动微调。

现在大多数“专业”运行时环境(如 Java、.NET 等)都使用 Just-in-Time 编译在执行前将字节码转换为本机代码。使用 JIT 的 VM 通常比字节码解释器具有更好的性能。现在的问题是,由于解释器基本上所做的只是加载一条指令并在跳转表中查找跳转目标(请记住,指令处理程序本身是静态编译到解释器中的,所以它已经是本机代码),将使用即时编译会提高性能还是会降低性能?我真的无法想象解释器的跳转表会降低性能大量用于弥补使用 JITer 编译该代码所花费的时间。我知道 JITer 可以对代码执行额外的优化,但在我的例子中,非常激进的优化已经在执行之前在字节码级别执行。你认为我可以通过用 JIT 编译器替换解释器来获得更快的速度吗?如果是这样,为什么?

我知道同时实施方法和基准测试将为这个问题提供最准确的答案,但如果有明确的答案,可能不值得花时间。

谢谢。

0 投票
1 回答
897 浏览

objective-c - 如何在 Objective-C 中实现面向服务的架构?

我想知道以下哪一项是面向服务设计的 Objective-C 中的正确用法/实现:

第一个版本特定于静态语言,使用协议(接口):

第二个版本不使用协议,依赖于 Objective-C 实际上是动态的这一事实:

显然不同之处在于 CloudServices 是一个接口或协议,我们暗示可以将 ServiceProvider 配置为返回 CloudServices 的不同实现。

所以我的问题是选择哪种风格,为什么?
谢谢。

0 投票
8 回答
68434 浏览

c++ - 避免头文件的循环依赖

请问您对如何避免头文件的循环依赖有什么好的建议吗?

当然,从一开始,我就尝试将项目设计得尽可能透明。然而,随着越来越多的特性和类被添加,项目变得越来越不透明,循环依赖开始发生。

是否有任何通用的、经过验证的和工作的规则?谢谢。

0 投票
1 回答
89 浏览

architecture - 什么是识别哪些特定游戏对象正在碰撞的好方法?

这是关于物理引擎的。一旦发生碰撞,它会返回两个游戏对象正在碰撞的信息。所有实体,如玩家、怪物、子弹等都是从 GameObject 派生(继承)的。

什么是识别哪些特定游戏对象正在碰撞的好方法?

枚举:我曾考虑过使用枚举,但是一旦您开始添加更多实体,就无法跟踪所有可能的组合。

编辑:我在这里找到了 C# 的潜在解决方案:http: //blogs.msdn.com/b/laurionb/archive/2009/08/13/multimethods-in-c-4-0-with-dynamic.aspx

但是,如果我必须在 C++ 中执行此操作,我该怎么做?

0 投票
1 回答
136 浏览

python - 曲面上的建模点

我的模拟模型包含表面上的代理。代理由 表示class Agent,它们的位置由表示class Point,表面本身由表示class Surface。每个点实际上只是一对数字。

为了模拟一个代理的运动,我需要知道他在哪个表面上(例如,在圆环上,他永远不会碰到陆地的末端,但在圆柱体上,他会。)

我的问题是我是否应该将对象class Point的引用作为实例属性添加到Surface

如果我这样做,class Point会变得更加复杂,并且效率会受到影响(而不是处理成对的数字,我将处理成对的数字加上一个参考)。class Surface这尤其令人讨厌,因为在单个程序运行中只有一个实例曾经实例化。

如果我不这样做,我将无法提供class Agent方法move。相反,我必须从一个知道表面代理和单个代理的外部类对代理的运动进行建模。这种方法在逻辑上似乎不太吸引人。

0 投票
1 回答
81 浏览

java - SOA、RPC 和项目间依赖关系

我对 SOA 的理解:业务中的各种系统都需要做安全检查,所以使用相同的流程并因此拥有 SecurityCheck 服务是有意义的。然后可以通过多种方式调用该服务——soap、rpc、http 请求。

如果到目前为止这是有道理的,那么我的问题是关于服务和 rpc 客户端之间的依赖关系:

应该有3个单独的项目,SecurityCheckService项目和RpcClient项目依赖于SecurityCheckResults项目吗?