内部平台效应
请提供您希望翻译的正文内容,我将为您翻译成简体中文。
内部平台效应
内部平台效应是指软件架构师倾向于创建一个高度可定制的系统,以至于它成为他们所使用的软件开发平台的复制品——通常是一个拙劣的复制品。这会导致低效的解决方案,此类系统常被引用为反模式的例子。
Source: …
示例
-
基于插件的软件 – 许多文本编辑器和网页浏览器允许开发者创建插件,以复制通常由操作系统提供的功能。
例如,Firefox 的插件机制已被用于构建 FTP 客户端和文件浏览器,从而在更受限的平台上有效地复现了一些操作系统特性。 -
数据库 “EAV” 反模式 – 有些开发者试图通过在单个表中使用三列(
entity_id、key、value)来规避 RDBMS。
虽然实体‑属性‑值模型让你摆脱了 SQL 数据库的刚性模式,但它也放弃了数据库的许多优势:查询变得错综复杂,索引和查询优化器无法有效工作,数据有效性约束也不再被强制执行。结果通常是性能差、可维护性低。 -
过度通用的 XML – 开发者有时会使用通用元素名(例如
<generic>),并在属性如type和value中存储有意义的数据。
这就需要在多个属性之间进行“连接”才能提取含义,使得 XPath 表达式更为复杂,评估更慢,结构验证的价值也大大降低。 -
Web 桌面 – 整个桌面环境(通常包括网页浏览器)可以在浏览器内部运行,而浏览器本身通常运行在操作系统提供的桌面之上。
“桌面中的桌面”对用户来说很别扭,通常仅用于运行那些难以在终端用户系统上部署的程序,或用于隐藏外层桌面。
效果
软件开发者创建与其特定项目相关的自定义函数库是很正常的。当这个库扩展到包含一般用途函数,而这些函数的功能已经可以通过编程语言或平台本身获得时,就会出现 内部平台效应。
由于这些新函数通常会调用多个原始函数,它们往往 更慢,而且如果编码不佳,还会 更不可靠。 需要引用。
另一方面,这类函数常常被创建出来,以在底层服务之上提供一个更简洁(且通常更可移植)的抽象层,而这些底层服务:
- 接口笨拙,
- 过于复杂,
- 不可移植或可移植性不足,或
- 与更高层的应用代码匹配度差。
适用场景
内部平台可以用于 可移植性 和 特权分离——换句话说,它允许相同的应用程序在各种外部平台上运行,而不会影响由内部平台管理的 sandbox 之外的任何内容。
例如,Sun Microsystems 设计了 Java platform,以实现上述两个目标。
另见
References
-
Celko, Joe (2011年2月1日). “SQL中的查找表”。 Simple Talk。
原文存档于2016年9月23日。检索于2016年4月25日。 -
Peterson, Don (2004年9月8日). “查找表狂热”。 SQL Server Central。
检索于2023年5月1日。
外部链接
- 原始定义和示例 – The Daily WTF: The Inner‑Platform Effect
- 示例:企业规则引擎 – The Daily WTF article
- 示例:“我想我会把它们称为‘事务’” – The Daily WTF article
- 反模式:危机中的软件、架构和项目重构 – William J. Brown 等,见 Wiki 页面:/wiki/AntiPatterns