问题标签 [magic-string]
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.
asp.net-mvc - ASP.NET MVC 中的魔术字符串
我有桌面软件开发背景,并且开始学习 ASP.NET MVC。
在我的默认 HomeController 中,我有 Index 操作,其代码如下所示:
换句话说,将用户重定向到“/account/login”。然后,AccountController.Login 操作将处理用户,并在他成功登录后将他发送回 HomeController。
这段代码对我来说很臭,也许只是因为我习惯于在桌面软件中以不同的方式做事。如果我将登录操作的名称更改为“LogOn”会怎样?如果我完全删除 AccountController 并用其他东西替换它会怎样?我将引入一个新错误,但不会出现编译器错误,而且我的单元测试也可能无法捕捉到它。由于我使用字符串来指定控制器和操作名称,因此重构和重新设计更有可能在各处破坏代码。
我想要的是这样的:
但是,我不确定这是否可能,或者这是否是最好的方法。
是我傻了,还是其他人有同样的问题?你怎么做才能绕过它?
php - 如何避免魔术字符串(PHP MVC 框架)
我想将 MVC 框架与 PHP 一起使用,以便在代码和表示之间进行很好的分离。我目前已经开始研究 CakePHP。看起来不错,但是那些魔线呢?
看看下面的代码(取自 CakePHP 食谱):
那些神奇的琴弦让我很困扰。代码中的字符串应该只是要输出的文本!
“Recipe.created DESC”中有一个拼写错误,它不会按预期工作。这里没有智能感知/代码完成来帮助!
另外,如果我想将“食谱”改成其他东西怎么办?我必须手动搜索所有代码并找出它是常规文本还是魔术字符串之一。
其他 PHP MVC 框架更好吗?(阅读:更少或没有魔术字符串)
关于如何避免魔术字符串的任何链接(至少尽可能多)......?
c# - C# 中的编译时间反射
我经常编写必须使用魔术字符串来表达属性名称的 C# 代码。每个人都知道魔术弦的问题。它们很难重构,没有编译时检查,而且常常导致难以诊断的问题。然而,C#/.NET 到处都使用它们来表示属性/类/方法名称。
这个问题多年来一直存在,目前唯一可行的解决方案是使用表达式树,然后在运行时解析属性名称。这可以让您获得令人满意的编译时检查,但它会使代码复杂化(需要表达式类型的参数),并且会产生运行时成本。
有谁知道 C#/.NET 是否曾经考虑过添加编译时反射来克服这个普遍存在的问题?
看起来这将是一个简单的添加,它将是一个非破坏性的更改,它将极大地使许多开发人员受益。typeof() 运算符已经执行了一种编译时反射形式,因此看起来像运算符 nameof() (或类似的东西)将是非常互补的。
此外,有谁知道此类功能的任何潜在问题?
谢谢您的帮助。
c# - 如何控制自定义模型绑定器的尝试值?
我有一个带有这样签名的动作:
这是这样实现的:
基本上,我将原始值绑定到枚举,非常简单。工作正常。
但是,请注意如何为了访问尝试的值,我需要使用一个魔术字符串(“myEnum”)。
有什么办法可以将它提供给模型活页夹,所以删除魔术字符串?
因为如果我想在其他地方使用这个模型绑定器,那么我必须确保我调用参数“myEnum”,否则会导致运行时错误。
我尝试在模型绑定器中添加一个 ctor,但实际上我没有在任何地方实例化它。
有任何想法吗?
language-agnostic - 我应该尽可能避免使用魔术字符串吗?
我有下一段代码:
我正在为 AD 进行一些解析,所以我有一些字符串,例如“DC=”、“objectCategory=”、“LDAP://”、“”、“。” 谁谁。我发现上面的代码比下面的代码更具可读性:(你可能会发现相反的,让我知道。)
即使我可能有“DC”和“DC =”,我也应该考虑这个变量的名称或将它们分成两部分:(。然后我的问题是: 我应该尽可能避免使用魔法字符串吗?
更新。
一些结论:
- 有一些方法可以完全避免使用字符串,这可能会更好。为了实现它,可以使用:静态类、枚举器、数字常量、IOC 容器甚至反射。
- 常量字符串可帮助您确保没有任何拼写错误(在所有对字符串的引用中)。
- 标点符号的常量字符串没有任何全局语义。使用它们会更具可读性,因为它们是","。如果该常量将来可能会发生变化,则可以考虑在这种情况下使用常量,例如将“,”更改为“。” (有一个常量可以帮助你进行重构,尽管现代工具作为resharper不需要常量或变量就可以做到这一点)。
- 如果您只使用它字符串一次,则不需要将其变为常量。但是请考虑一个常量可以记录并显示在文档中(如 Javadocs)。这对于非平凡的字符串值可能很重要。
events - bbvEventBroker 强类型且没有魔术字符串
我想将 bbvEventBroker 与 Ninject 一起使用,但是我担心使用魔术字符串来连接发布者和订阅者。有没有一种强类型的方法可以在没有魔术字符串的情况下做到这一点。我需要有一个中央静态魔术字符串存储库吗?
websocket - WebSocket 协议中的“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”是什么意思
我不明白RFC 6455中“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”的含义。为什么服务器需要这个魔术字符串?而为什么 WebSocket 协议需要这种机制呢?
asp.net-mvc - 如何处理 MVC 视图中的“魔术字符串”,例如元素 id:s?
在我的 MVC 视图中,我经常需要从 JavaScript 中引用各种元素,为此我为这些元素定义了 id 属性。这通常与更新各种容器元素内容的 Ajax 调用结合使用。
一个简短的例子(剃刀):
这包含三个“魔术字符串”:“PersonList”、“PersonDetails”和“CurrentPersonId”。Ajax 调用可能如下所示:
再次出现魔术字符串“PersonDetails”。
不好!
任何人都可以提出一些“最佳实践”来在一个地方定义这些魔法字符串并将它们用于 1)视图,2)最好是实现 Ajax 调用等的静态 JavaScript 文件,以及 3)CSS 文件?
我在想,也许 _Layout.cshtml 可以包含一个局部视图,该视图定义了该控制器甚至特定操作的魔术字符串。它将检查调用它的控制器和/或操作,并基于此调用适当的局部视图。我已经为 .css 和静态 .js 做了类似的事情,让我简单地添加 Person.css 并自动将其包含在 Person 控制器的所有视图中。
部分视图会做这样的事情:
这应该让 Razor 代码使用 C# 字符串 consts 生成适当的 HTML,并且静态 JavaScript 文件可以引用 jQuery 选择器等中的 NamesAndIds。(假设在局部视图中定义的 consts 将在调用视图中可用,我对此表示怀疑(避风港'还没有检查过)......我不知道如何在.css文件中使用它们。
有更好的建议吗?你如何处理这个问题?
c# - 识别数组中基类的实现
我有以下问题:我有一组自动(监听事件)控制我的模型的引擎。下图显示了一般的类图:
现在我有一个知道 EngineFacade 的客户端,我想从客户端的 Engine2 设置属性 Active,但是客户端和 EngineFacade 都不知道三个引擎中的哪一个是 Engine2。
有两种方法,但我不喜欢其中任何一种:
- 检查其中一个引擎是否属于 Engine2 类型 - 如果有另一个类执行相同的任务但名称不同,我必须在 EngineBuilder 和 EngineFacade 中更改它。
- 检查标识符字符串 - 我真的不喜欢魔术字符串。
我在客户端站点上所知道的是存在或应该有一个处理网格的引擎。但我不知道更多。
也许我必须在两个恶魔之间做出选择,但也许你们中的一个有更好的解决方案。