立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

框架设计规范的新方向

  • 2008-11-06
  • 本文字数:1361 字

    阅读完需:约 4 分钟

微软的框架设计规范是设计的准则,它期望所有的微软类库和独立开发者都能够遵循这一准则。随着每个.NET 框架版本的发布,以及在行业内的测试,它们的版本也得到了精化。通过 Cwalina 与 Abram 所著的《框架设计规范》第二版的发布,我们可以看到微软在今后几年的发展方向。

或许最令人惊讶的事实是日渐增长的对于测试驱动开发和依赖注入的重视。在可重用框架的场景下,通过测试驱动开发设计出的框架是真实可用的,而不是简单地推理。他们希望这样可以反过来杜绝某种趋势,那就是过度复杂地设计一些根本不会用到的功能。

谈到这一问题,就不得不指出的是微软当前正在推动的一个活动,即针对所有库的第 1 个版本进行最低限度设计。这不同于在第一次就要试图将所有事情做对,微软推荐在最开始只需要满足需求中绝对需要的特性。Abrams 和 Cwalina 建议在最初并不需要考虑扩展性,只有到需求变得非常清晰的时候,才在后一个版本中考虑。从某个方面来讲,这是微软旧有传统的回归,它只会在第三个版本中提供真正完成的应用程序。

在其它领域,微软则完全没有改变。他们仍然强调所谓的“基坑成功(Pit of Success)”,并将其作为设计圭臬,特别是在谈及开发者的生产力时,尤其如此。例如,对于 Exception 类的构造函数应该定义为 protected,而不是 public,这就可以强迫开发者采取正确的方式,抛出一个适当的异常。相反地,我们现在必须借助于 FxCop 准则对此进行检查。

他们不断鼓吹的另一个原则是“相同的力量”,对这一目标的追求可以使得新类库的工作方式,对于其他.NET 类库的用户而言是直观的。它被应用在代码的各个方面,包括命名规范、术语约定以及设计模式。

微软强调的新增内容是依赖注入。虽然他们总是被用在各个类库中,但从未如此正式地将其看作为一种设计模式。相反,它仅仅在 API 需要时作为一种补充。这种情况到了.NET 3.0 有所改变,依赖注入与控制反转都是一种特定的要求。

一旦涉及到 CLR 顶端的技术,框架设计规范就是不可知的。例如,微软并没有用它来推动依赖注入类库,即托管的可扩展性框架的运用。相反,其重点放在设计目标、编写松散耦合、可测试的代码上。

在 PDC 中,特别强调了某些特定的建议,包括:

类的构造函数应该是延迟的。从本质上讲,他们所要做的不仅仅是要捕获参数,因为通常不会用到新的被实例化的类。

属性应该:

  • 不要抛出异常(getter)
  • 不要被用作转换(getter)
  • 不要产生副作用(setter)
  • 足够快速,而不用考虑对象的状态
  • 永远不要返回一个数组,或者一个克隆的列表(getter)

扩展方法应该用于为接口“添加”重载,也可以用于管理类库之间的依赖。例如,如果程序集 B 依赖于程序集 A,则 A 中的类不会暴露 B 中的功能。然而,A 中的类可以通过 B 中的扩展方法进行标记,提供依赖的效果,但实际这种依赖并不存在。

对于类的层级,总体不应超过 2 到 3 个层级。过深的层级会导致很难保证每个实现,因为实现必须遵循整个契约。谈到这一问题,其中至关重要的一点,就是为了保证工作正确,任何重写的成员都应该具有一个显式的契约细节,以包含子类需要做的内容。

接口应该小,最好只包含一个方法。每增加一个额外的方法,就可能使得接口难以正确设计,而在将来甚至会需要更多的方法。如果不适用于抽象基类,可以将接口串联在一起,以构建其功能。

查看英文原文: New Directions in Framework Design Guidelines

2008-11-06 23:311090
用户头像

发布了 109 篇内容, 共 40.8 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

ps天文景观插件 Astro Panel Pro for Mac v6.0.0苹果版

Rose

ps天文景观插件 Astro Panel Pro Photoshop插件下载安装

15款中国风大气水墨笔触PS笔刷

Rose

Set A Light 3D Studio 三维模拟影棚布光软件中文汉化版 支持M1/M2

理理

实用的硬盘健康监测和分析工具Drive Scope for mac

Mac相关知识分享

远程访问软件Microsoft Remote Desktop Beta for Mac激活版

Mac相关知识分享

非常优秀的压缩解压缩工具 Keka for Mac v1.3.6中文版

理理

Keka下载 Keka压缩软件 mac装机必备

案例研究:如何在复杂环境中增强自组织

ShineScrum捷行

自组织

文献解读-《Beta-amylase and phosphatidic acid involved in recalcitrant seed germination of Chinese chestnut》

INSVAST

农业 基因数据分析 生信服务

IoTDB 在顶级会议 VLDB 2024:四篇最新论文入选,特邀做 TPC 报告与讨论会!

Apache IoTDB

重庆企业选择堡垒机需要考虑哪些因素?有没有推荐的?

行云管家

堡垒机 IT资产 重庆

用 Higress AI 网关降低 AI 调用成本 - 阿里云天池云原生编程挑战赛参赛攻略

阿里巴巴云原生

阿里云 云原生 Higress

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。 按照以下规则进行n次

福大大架构师每日一题

福大大架构师每日一题

中标智能制造!亚信科技+用友网络,助重庆大型制造企业重塑生产管理

亚信AntDB数据库

AntDB

Sensei For Mac 苹果电脑系统优化清理工具

理理

苹果电脑 Sensei Mac下载 系统优化清理工具

轻松管理文件:2024年顶尖局域网文档管理工具

爱吃小舅的鱼

文档管理 局域网

高效地窗口布局管理工具:Magnet for mac

理理

窗口管理工具 magnet pro 破解版 Magnet Pro中文版

AirBuddy 3 for mac AirPods耳机管理软件

理理

Airbuddy AirPods耳机管理工具

MacCleaner Pro for Mac(系统综合清理软件) v3.2.5永久激活版

理理

面试官:Kafka中的key有什么用?

王磊

科研院所如何选购最佳项目管理系统

爱吃小舅的鱼

项目管理 科研项目

设计师必备:CAD迷你看图 for mac 图纸浏览新体验!

理理

CAD迷你看图 DWG文件浏览工具 mac软件安装

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

亚马逊云科技 (Amazon Web Services)

生成式人工智能

输入一句话,生成一个应用:低代码平台如何借力AI大模型颠覆开发模式

天津汇柏科技有限公司

低代码平台 AI大模型

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK

HarmonyOS

Flink CDC 在新能源制造业的实践

Apache Flink

大数据 flink 实时计算 Flink CDC

GO语言编程工具环境 JetBrains GoLand 2020中文无限试用版

理理

GoLand 2022破解版 GoLand 2022中文版 GO语言编程

全系列ai插件合集 Astute Graphics for Mac v3.0.4永久激活版

理理

VMware Cloud Foundation 9 发布 - 领先的多云平台

sysin

云计算 vSphere vmware esxi vcf

mac游戏:魔兽争霸3冰封王座Warcraft III for mac 版

你的猪会飞吗

魔兽争霸3 冰封王座 Mac游戏下载

Apache RocketMQ 批处理模型演进之路

阿里巴巴云原生

Apache 阿里云 RocketMQ 云原生

BSI最新研究发现,中国企业人工智能投资增长意愿全球领先

财见

框架设计规范的新方向_.NET_Jonathan Allen_InfoQ精选文章