问题标签 [design-guidelines]
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.
c# - 在 C# 中防止错误使用支持字段的最佳方法
我有一个类(Foo),它延迟加载一个名为(Bar)的属性。防止未初始化的支持字段被错误使用(由于智能感知或缺乏经验的工作人员)的首选方法是什么?
我可以想到3个选项:
请记住,我希望人们使用支持字段栏的唯一地方是属性的 setter 和 getter。在课堂上的其他任何地方,他们都应该始终使用 this.Bar
更新
我目前正在使用以下延迟实现(不是针对所有具有支持字段的属性,而是针对需要延迟加载、同步和通知的选定属性)。它也可以扩展到支持期货(稍后在单独的线程中强制评估)
注意我的实现在读取时锁定,因为它支持外部集。
另外,我想提一下,我认为这是一个可以在Ruby 中克服的语言限制。
您可以通过这种方式实现惰性。
c# - 命名空间命名约定
对于那些编写可重用组件的人,如果您要扩展 .NET 框架的功能,您认为最佳实践是什么?
例如,我目前正在创建一个 Pop3 库,因为 .NET 中不存在该库。我是创建自定义命名空间还是使用System.Net.Mail
?
c# - 用于命名布尔属性的 FDG 是什么?
命名布尔属性的框架设计指南是什么?如果没有,那你的建议是什么?
假设我有一个User
类,我需要一个属性来指定用户是否启用。这些是我能想到的选项:
- 使能够
- 启用
- 已启用
- 禁用
- 已禁用
- 被禁用
此外,如果 BL 说用户必须默认禁用并显式启用,考虑到默认值System.Boolean
是,我应该更喜欢“启用”变体false
吗?
design-patterns - 单一职责原则 (SRP) 在什么抽象级别不再有意义?
我从一位同事那里得到了一个设计的回击,我想知道在这种情况下谁是正确的 SRP 应用是否存在共识。
我认为 SRP 主要与较低级别的设计细节有关,例如类责任。随着抽象级别的提高,我相信 SRP 仍然是相关的,但单一职责的定义也必然会向更高级别的抽象移动。
在我的具体情况下,在我看来“处理 foo、存储其结果并提供对这些结果的访问”的服务具有“foo 处理子系统”的单一责任,但是同事不同意并将其视为 2-3责任。我的情况是,如果您总是将单一职责分解为微小的细节,那么拥有“银行”就违反了 SRP,因为它“持有资金、维护账户、出售抵押贷款……”。
c# - 编写类型化 SQL 语句 API 的设计指南?
昨晚我在设计我的新项目时遇到了一些有趣的事情,这让我在这里提出了这个问题。
我的项目应该遵循 Table Gateway 模式,使用传统的 ADO.Net 数据集进行数据访问。我不想在我的数据访问类中编写普通查询。因此,我想出了一个想法,即编写一个解析器 kindaa api,它公开对象和方法,以便根据我的域对象在移动中生成查询。
稍后我希望这个 api 连接到我的业务对象并在业务对象实例上提供类型化 SQL 生成器 api。
任何想法或参考我该怎么做?这似乎很广泛,我不得不在这里接受你的意见。是否已经存在可以做到这一点的东西?
user-interface - 隐藏还是禁用?在这个例子中,一般来说
我有以下一组控件。
场景一:
如果您选择前 3 个单选按钮之一并单击 Enter,焦点将跳转到 Passport Number 文本框。如果用户选择“其他”,则启用“其他,请指定”文本框,并且为方便起见,屏幕焦点(光标移动)到该文本框。
场景二:
“指定其他”文本框是隐藏的,直到用户单击“其他单选”按钮。这样做后,文本框变为可见并且光标放置在此文本框中。
您认为哪种方案更好?也许你有另一种变化?请说出你的理由。
如果您能就何时隐藏比禁用更好或反之亦然做出一个概括性的陈述,我也将不胜感激,但我也对这个特定示例感兴趣。
谢谢。
Afetrthought:也许,在第二个例子中,“请指定”文本只会在用户选择“其他”单选按钮后出现。
internationalization - 代码“国际化”
我在不同国家从事不同的项目,并表示有时代码会变得国际化,比如
设置LargeurEtHauteur () (对于 SetWidthAndHeight, fr )
Dim _ListaDeObiete as List(Of Object) (对于 _ObjectList, ro )
internal void Sohranenie User ov () (对于 SaveUsers, ru )
等等。
碰巧在使用拉丁字母的国家,这种混合更为明显,因为不需要音译。
不仅如此,编程“行话”通常受到项目规范语言的启发。在某些情况下,“项目语言”中的术语具有在英语中不可“翻译”的含义。
还有一些项目仅适用于法国团队,例如使用法语单词(例如,Personne、Vehicule、Projet 等)。
在这种情况下,我个人在规范中添加了一个“字典”,它解释了所有业务对象名称,并且只有这些对象用于其他(法语)语言。
说:
Collectif - ensemble des Personnes ;
所有操作(获取、设置、更新、修改、加载等)都是英文的。
现在可以在代码中使用“强”名称: Add Personne To Collectif。
- 您对“国际化”的态度是什么?
PS。
我很高兴 VisualStudio 在 .NET 中使用名为“btnAdd É lève ”或“кпкСтоп”的按钮编译和运行项目...
android - 在 Android 上同时将数据保存在内存和数据库中的最佳实践
我们正在设计一个包含大量数据(“客户”、“产品”、“订单”...)的 Android 应用,并且我们不希望每次需要一些记录时都查询 SQLite。我们希望尽可能避免查询数据库,因此我们决定将某些数据始终保存在内存中。
我们最初的想法是创建两个简单的类:
“MemoryRecord”:一个基本上包含对象数组(字符串、整数、双精度、日期时间等)的类,这些对象是表记录中的数据,以及从中获取这些数据的所有方法大批。
“MemoryTable”:一个基本上包含 [Key,MemoryRecord] 的 Map 以及操作此 Map 和将记录插入/更新/删除数据库的所有方法的类。
这些类将派生到我们在数据库中拥有的每一种表。当然还有其他有用的方法没有在上面列出,但在这一点上它们并不重要。
因此,当启动应用程序时,我们将使用这些类将这些表从 SQLite 数据库加载到内存中,并且每次我们需要更改一些数据时,我们都会在内存中进行更改,然后将其发布到数据库中。
但是,我们需要您提供一些帮助/建议。你能建议一些更简单或更有效的方法来实现这样的事情吗?或者也许一些现有的课程已经为我们做了?
我明白你们想向我展示什么,我为此感谢你们。
但是,假设我们有一个包含 2000 条记录的表,我需要列出这些记录。对于每一个,我必须查询其他 30 个表(其中一些有 1000 条记录,另一些有 10 条记录)以在列表中添加其他信息,而这正在“飞行”(如您所知,我们必须非常快此刻)。
现在你会说:“只需使用所有这些'连接'构建你的主查询,然后一步完成你需要的一切。如果你的数据库设计得很好,SQLite 可以非常快,等等......”。
好的,但是这个查询会变得非常复杂并且可以肯定,即使 SQLite 非常快,它也会“太”慢(2 到 4 秒,正如我所确认的,这对我们来说不是可接受的时间)。
另一个复杂点是,根据用户交互,我们需要“重新查询”所有记录,因为所涉及的表并不相同,我们必须与另一组表“重新连接”。
因此,另一种方法是只带主要记录(这永远不会改变,无论用户做什么或想要什么)而不连接(这非常快!),并且每次我们想要一些数据时查询其他表。请注意,在只有 10 条记录的表上,我们将多次获取相同的记录。在这种情况下,这是浪费时间,因为无论 SQLite 速度如何,查询、游标、获取等总是比仅仅从一种“内存缓存”中获取记录更昂贵。我想明确一点,我们不打算将所有数据始终保存在内存中,只是我们经常查询的一些表。
我们来到了最初的问题:“缓存”这些记录的最佳方式是什么?我真的很喜欢集中讨论这个问题,而不是“为什么需要缓存数据?”