《NET 设计规范》第 2 章 框架设计基础

  要设计功能强大又易于使用的框架。

  要理解广大开发人员并有针对性地为他们设计框架。

  要理解各种编程语言,并为他们设计框架。  

2.1 渐进框架

2.2 框架设计的基本原则

  要确保在设计任何包含公用API的特性时,把 API 设计规格书作为它最核心的部分。

  要为每个主要的特性域定义一些最常见的使用场景。

  要确保使用场景与适当的抽象层次相对应。场景应该大致与最终用户的用例相对应。

  要在设计 API 时,先为主要的使用场景编写样例代码,然后在定义对象模型来支持这些样例代码。

  要用至少两种不同风格的编程语言来为主要场景编写样例代码。

  考虑用动态类型语言来为主要场景编写样例代码。

  不要在设计框架的公用 API 时完全依赖于标准的设计方法。

  要安排可用性测试研究来测试用于主要场景的 API。

  要确保每个主要特性域的命名空间只包含那些用于最常见场景的类型。应该把用于更高级场景的类型放在子命名空间中。

  要为构造函数和方法提供简单的重载函数。一个简单的重载函数不仅参数的数量非常少,而且所有的参数都是基本类型。

  不要把用于高级场景的成员放在为主要使用场景而设计的类型中。

  不要要求用于在最基本的场景中显示地实例化一个以上的类型。

  不要要求用户在为基本使用场景编写代码之前就进行大量的初始化。

  要尽可能地(用便利的重载函数)为所有的属性和参数提供合适的默认值。

  要通过异常来传达对 API 的误用。

  要确保 API 是直观的,无需查阅参考文档就能用于基本场景。

  要为所有的 API 提供优秀的文档。

  要在审查规格书的时候投入大量的时间和精力,来讨论标识符名称的选择。

  不要担心标识符的名字太冗长。

  考虑在设计过程的早期让用于教育专家参与。考虑把最好的名字留给常用类型。

  要通过异常消息来告诉开发人员对框架的误用。

  要尽可能地提供强类型的 API。

  要确保与 .NET 框架以及客户可能会使用的其它框架保持一致。

  避免在主要场景的 API 中使用太多的抽象。

  考虑对框架进行分层,使高层API能够提供最佳的开发效率,低层API能提供最强大的功能和最丰富的表现力。

  避免把非常复杂(即包含许多类型)的低层API和高层API混在同一个命名空间中。

  要确保单个特性域中不同的层能很好地集成在一起。开发人员应该能在开始时使用其中一层来进行开发,然后通过修改代码就可以使用另一层,而且这样的改动应该无需重写整个应用程序。

《NET 设计规范》第 2 章 框架设计基础的更多相关文章

  1. 《手把手教你》系列基础篇(八十三)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-下篇(详解教程)

    1.简介 其实前边好像简单的提到过测试报告,宏哥觉得这部分比较重要,就着重讲解和介绍一下.报告是任何测试执行中最重要的部分,因为它可以帮助用户了解测试执行的结果.失败点和失败原因.另一方面,日志记录对 ...

  2. 《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程)

    1.简介 TestNG还为我们提供了测试的记录功能-日志.例如,在运行测试用例期间,用户希望在控制台中记录一些信息.信息可以是任何细节取决于目的.牢记我们正在使用Selenium进行测试,我们需要有助 ...

  3. 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)

    1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...

  4. 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)

    1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...

  5. 《手把手教你》系列基础篇(七十六)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 下篇(详解教程)

    1.简介 今天这一篇宏哥主要是结合实际工作中将遇到的测试场景和前边两篇学习的知识结合起来给大家讲解和分享一下,希望以后大家在以后遇到其他的测试场景也可以将自己的所学的知识应用到测试场景中. 2.测试场 ...

  6. 《手把手教你》系列基础篇(七十七)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 上篇(详解教程)

    1.简介 今天主要是讲解和分享:TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用dependsOnMethods,testNG会自动根据@Test方法名称 ...

  7. 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)

    1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...

  8. 《手把手教你》系列基础篇(八十)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试-番外篇(详解教程)

    1.简介 经过前边几篇知识点的介绍,今天宏哥就在实际测试中应用一下前边所学的依赖测试.这一篇主要介绍在TestNG中一个类中有多个测试方法的时候,多个测试方法的执行顺序或者依赖关系的问题.如果不用de ...

  9. 《手把手教你》系列基础篇(八十一)-java+ selenium自动化测试-框架设计基础-TestNG如何暂停执行一些case(详解教程)

    1.简介 在实际测试过程中,我们经常会遇到这样的情况,开发由于某些原因导致一些模块进度延后,而你的自动化测试脚本已经提前完成,这样就会有部分模块测试,有部分模块不能进行测试.这就需要我们暂时不让一些t ...

随机推荐

  1. 1c19b35b005744d55261682b361804fa 这个是MD5

    1c19b35b005744d55261682b361804fa   这个是MD51c19b35b005744d55261682b361804fa   这个是MD51c19b35b005744d552 ...

  2. python对pywifi模块的认识

    pywifi是一个用来搞wifi的模块 下一章我们将用他破解wifi密码 pywifi安装 pip install pywifi 下列代码判断是否有无限网卡 import pywifi import ...

  3. CSS3中only-child伪类选择器

    <body> <style type="text/css"> //只对li1设置样式 li:nth-child(1):nth-last-child(1){ ...

  4. 51Nod 1090 3个数和为0(暴力)

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  5. qscoj 128 喵哈哈村的魔法源泉(2)(模仿快速幂,好题)

    喵哈哈村的魔法源泉(2) 发布时间: 2017年5月9日 20:59   最后更新: 2017年5月9日 21:00   时间限制: 1000ms   内存限制: 128M 描述 喵哈哈村有一个魔法源 ...

  6. SPOJ GSS1_Can you answer these queries I(线段树区间合并)

    SPOJ GSS1_Can you answer these queries I(线段树区间合并) 标签(空格分隔): 线段树区间合并 题目链接 GSS1 - Can you answer these ...

  7. hdu_1358Period(kmp找循环前缀)

    题目在这儿 Period Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  8. 搭建ruby环境

  9. Spark算子--first、count、reduce、collect、lookup

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/4b8582c8dde1529abb11e4ccc8296171.html first.count.reduce ...

  10. Bad Request (Invalid Hostname)什么意思? 200

    一般来说与你电脑无关 错误请求(无效主机名) 域名已绑定主机 但主机未绑定域名就会出现这种情况! 总结页面出现Bad Request (Invalid Hostname)的原因: 1.如果确定域名已经 ...