问题标签 [design-decisions]

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 投票
9 回答
16237 浏览

c# - 什么时候不应该在 .Net 中使用 ThreadPool?

什么时候不应该在 .Net 中使用 ThreadPool?

看起来最好的选择是使用线程池,在这种情况下,为什么它不是唯一的选择?

您对此有何经验?

0 投票
6 回答
12637 浏览

.net - IdbConnection 与 SqlConnection

当我编写应用程序时,我使用 System.Data 接口(IDbConnection、IDbCommand、IDataReader、IDbDataParameter 等...)。我这样做是为了减少对供应商的依赖。除非,我正在做一个简单的测试应用程序,否则在咨询时这似乎是合乎道德的事情。

但是,我看到的所有代码似乎都使用 System.Data.SqlClient 命名空间类或其他供应商特定类。在杂志和书籍中,很容易将其归结为 Microsoft 的影响力和他们的营销策略,只针对 SQLServer 进行编程。但它看起来就像我看到的几乎所有 .NET 代码都使用 SQLServer 特定类。

我意识到供应商特定的类具有更多功能,例如向 SqlCommand 对象添加参数是一种方法,而将其添加到 IDbCommand 是令人讨厌的 4 多行代码。但话又说回来; 为这些限制编写一个小助手类非常简单。

我还想知道当 SQLServer 是当前目标客户端时针对接口进行编程是否过度设计,因为它不是立即需要的。但我不认为这是因为针对接口进行编程的成本如此之低,因为减少供应商依赖性提供了如此巨大的好处。

您是否使用供应商特定的数据类或接口?

编辑:总结下面的一些答案,并提出我在阅读它们时的一些想法。

使用接口实现供应商中立性的可能陷阱:

  • 嵌入在您的 SELECT 语句中的供应商特定关键字(我所有的 ins、upd 和 del 都在 procs 中,所以这不是问题)
  • 直接绑定数据库可能会导致问题。
  • 除非您的连接实例化是集中式的,否则无论如何都需要调用供应商特定的类。

使用接口的积极原因:

  • 根据我的经验,客户一直很欣赏转移到不同供应商的能力(即使没有行使)。
  • 在可重用代码库中使用接口
0 投票
4 回答
911 浏览

.net - EpiServer CMS 5 R2:自定义页面提供程序 - 正确的选择?

我在一个新项目中使用 EpiServer CMS 5R2。我的任务是创建一个 CustomPageProvider 以链接到我们无法控制的现有后端存储。然而,查看示例提供程序 (XmlPageProvider) 似乎提供程序负责维护 EpiServer 所需的元信息,例如(来自 examples.xml 文档):

我对此有点担心,因为我更希望 EpiServer 负责这一点。这是一个大容量网站,如果我的服务不必包含额外的数据存储来维护此信息,那就太好了,至少可以说存在缓存性问题。

所以,问题:

  1. 自定义页面提供者是适合这项工作的工具吗?

  2. 如果是这样,有没有办法将这个责任推回到 EpiServer 上?

  3. 如果没有,您能否就如何最好地存储这些数据给我任何建议?因为它超出了我们数据源的内容。

非常感激!

罗伯特·史蒂文森-莱格特

0 投票
1 回答
1880 浏览

desktop - Web 与桌面开发(在线与智能客户端)

我在一家拥有大量 SAP 投资的公司工作,我们还有数十个大型 .Net 系统(主要用于内部工程系统)和 Java 平台(主要用于外部 Web 应用程序)。因此,我们在 ABAP、C# 和 Java EE 上有大型开发商店。

对于在哪个域中使用哪个平台,我们有很好的标准,但是对于何时使用 Web UI 以及何时使用桌面 UI,我们并没有很清楚。

我过去看过一些关于这个主题的优秀研究(像这样),但我想要一些更有条理的东西

我想根据最佳实践构建一个决策树来帮助解决这个问题。

我过去看到的一些标准包括:

  • 该应用程序是否针对具有不同操作系统配置的用户?
  • 应用程序是否需要 OS 类型的功能来排序和编辑数据?(我知道 AJAX / 异步 JS 为 Web 应用程序提供了更丰富的类似桌面的功能,但有些人认为桌面仍然是该领域的王者)
  • Web 应用程序能否提供桌面应用程序可以提供的可用性、响应性、清晰度和实用性?
0 投票
5 回答
373 浏览

perl - 我应该如何处理不应再在 Perl 中使用的对象?

我正在编写一个链接到外部资源的类。其中一种方法是删除外部资源的删除方法。不应对该对象进行进一步的方法调用。如果设置了标志,我正在考虑设置一个标志并在所有方法中消亡,但有没有更好、更简单的方法?可能涉及到 DESTROY 的东西?

到目前为止,我真的很喜欢 Axeman 的建议,但是使用 AUTOLOAD 因为我懒得重新创建所有方法:

0 投票
3 回答
159 浏览

ruby-on-rails - 我如何知道何时以及是否为一段代码设置单独的控制器?

所以我处于一种情况,我必须决定是否为一段特定的代码设置一个单独的控制器。我们有一个主页,它就像网站其余部分的中心一样。所有用户(登录和未登录)都可以访问该页面。我正在考虑将其home作为一个单独的控制器和一个名为index. 考虑到这种情况,我开始怀疑这方面是否有任何规则或指导方针。

我的看法是,如果代码围绕实体旋转,则需要分离。(类似于 REST 指南)如果实体是名词,它应该是控制器。如果实体是动词,它可能应该是一个动作,并且应该驻留在名称与动词所指名词相同的控制器中。一些同事建议,既然这是一个动作,它应该驻留在一些现有的控制器中,并且应该命名为home. 我强烈反对,但是,我找不到可以支持我的可靠来源。

想知道你的想法。

0 投票
2 回答
427 浏览

c# - 混淆 C# 鸭子类型、隐式转换和不一致

每个人似乎都喜欢鸭子打字,如果它看起来像鸭子,行为像鸭子,像鸭子一样对待它。C# 4.0 允许鸭子打字,目前在少数情况下支持它(请参阅http://www.eioba.com/a75370/how_duck_typing_benefits_c_developers中的“C# 已经使用鸭子打字很长时间” )

现在...几乎所有东西都有一个.AnotherType()。我无法理解需要 .ToString() 的 int 但是当将列表传递给需要 obj[] 的函数时,它真的需要 .ToArray() 吗?似乎不一致。

有人可以解释不一致之处,解释为什么 .ToArray 有意义(或任何其他设计决策)或给我任何类型的见解吗?

0 投票
2 回答
1413 浏览

c# - 需要数组的可变参数函数的设计决策是什么?

我很好奇,希望有人能对此有所了解——但为什么采用“参数”的 C# 函数必须是一个数组?

我知道参数列表中的对象被输入了一个数组,但是如果有人想要创建一个可变参数函数来接收未定义数量的数组对象怎么办?

以这个函数为例...

很简单,它可以接受不同数量的数字 - 例如......

现在假设我想创建一个函数,它接收不同数量的整数数组并对所有数字求和。据我所知,我将不得不考虑拳击......

然后可以像...一样使用

这背后的原因是什么?为什么这不是作为一个单一的非数组变量实现的?比如params Int32

0 投票
6 回答
1964 浏览

orm - 主键 - 本机、序列或 GUID 键?

在阅读这个这个然后阅读这个(讽刺地引用其他两个)时,我发现自己想知道这个话题的讨论有多大?我是一名 SQL Server 人员,因此我倾向于使用以 int 形式自动生成的标识。但是,当我知道我需要在服务器和服务器之间进行某种形式的复制或在客户端和服务器之间进行同步时,我倾向于使用 GUID 作为我的密钥。

问题: 我是否应该始终使用 GUID 作为所有表的主键,以防万一我可能需要这种可能的可扩展性?这是否使我的架构更加灵活,因为它可以随时在平台之间迁移?通过不嵌入特定于平台的功能,这是否有助于我保持我的 ORM 的灵活性(无论其风格如何)?

回应:

@David Archer:根据您的评论,我更新了我的帖子,不再说“天然钥匙”。您是正确的,因为自然键是这样定义的。感谢您的指正。

0 投票
7 回答
197 浏览

user-interface - 这个用户决定的预期行为应该是什么?

我有这个应用程序,用户可以在其中更改文本文件,当他们忘记保存它们时,会弹出一条小消息,提醒他们更改未保存,并通过两个按钮“是”询问他们是否要保存更改和不”。它还有一个小复选框,上面写着“禁用此警告”。同样的,如果用户检查它,当文本文件有未保存的更改时,该消息将永远不会再次弹出。

几个问题:

1)如果用户只选择“是”,只选择“否”或其中任何一个,是否应该记住复选框值(如果他们选中)?

2)假设用户选中了复选框,因此不会再次警告未保存的更改。下次用户忘记保存更改时,预期的行为应该是什么?

在用户禁用警告后,我是否应该始终假设默认操作(是:保存更改,否:放弃更改)?如果有,采取什么行动?

或者我应该始终保存更改或始终在他禁用警告后根据最后用户操作丢弃更改?