[Framework Design Guideline]
[Framework Design Guideline]基础知识
最近在读<Framework design guideline>, 感觉其中Framework的许多设计经验同样适用于业务类库的设计,甚至对于服务的设计也同样适用。
日常的设计和编码中,书中提到的许多原则也有所领悟,但一直无法系统的组织起来。
所以此文把这些指导经验都整理起来,一作为备忘,二也是为这些平常只能靠感觉的东西建立成文的指导。本文只整理了一些对于业务应用类库开发更有用的原则。
一、什么是好的设计
- Well-Designed Frameworks are simple.
- Well-Designed Frameworks are expensive to design.
- Well-Designed Frameworks are full of trade-offs.
- Well-Designed Frameworks borrow from the past.
- Well-Designed Frameworks are designed to evolve.
- Well-Designed Frameworks are integrated.
- Well-Designed Frameworks are consistent.
二、如何做出好的设计
Design frameworks that are both powerful and easy to use.
好的类库/框架应该既能满足复杂的业务场景又易于使用。也就是简单的事情简单做,复杂的事情可以做。
The Principle of scenario-driven design.
Make sure that the API design specification is the central part of the design of any feature that includes a publicly accessible API.
Define top usage scenarios for each major feature area.
Ensure that the scenarios correspond to an appropriate abstraction.
Design APIs by first writing code samples for the main scenarios and then defining the object model to supprot the code samples.
Don’t rely solely on standard design methodologies when designing the public API layer of a framework.
在设计一个公共类库的时候,不要单独依赖某一种设计方法,包括一些经典的面向对象的设计方法。因为这些方法可能更多的针对可维护性,而不是framework的可用性。
最好使用场景驱动、原型、可用性研究等方法,再配合迭代。
Organize usability studies to test APIs in main scenarios.
应该在开发早期就对主要业务场景进行可用性研究,因为可用性的问题可能导致底层设计的改变。
The Principle of Low Barrier to Entry
Ensure that each main feature area namespace contains only types that are used in the most common scenarios.
Types used in advanced scenarios should be place in subnamespaces.
Provide simple overloads of constructors and methods. A simple overload has a very small number of parameters, and all parameters are primitives.
Don’t require users to explicitly instantiate more than one type in the most basic scenarios.
Don’t require that users perform any extensive initialization before they can start programming basic scenarios.
Provide good defaults for all properties and parameters.
Communicate incorrect usage of APIs using exceptions.
异常应该能够清楚表达什么导致了这个异常,并描述如果处理。
The Principle of Self-Documenting Object Models
Ensure that APIs are intuitive and can be successfully used in basic scenarios without referring to the reference documentation.
Provide great documentation with all APIs.
Make the discussion about identifier naming choices a significant part of specification reviews.
Don’t be afraid to use verbose identifier names.
Consider reserving the best type names for the most commonly used types.
Use exception messages to communicate framework usage mistakes to the developer.
Provide strongly typed APIs if at all possible.
Avoid many abstractions in mainline scenario APIs.
The Principle of Layered Architecture
Using a layered framework with high-level APIs optimized for productivity, and using low-level APIs optimized for power and expressiveness.
Avoid mixing low-level and high-level APIs in a single namespace if the low-level APIs are very complex.
[Framework Design Guideline]的更多相关文章
- [书籍]重温《Framework Design Guidelines》
1. 前言 最近重温了<Framework Design Guidelines>. <Framework Design Guidelines>中文名称为<.NET设计规范 ...
- learn from collection framework design
最难忍受的痛苦,也许是想干一件事情而又不去干.--罗曼·罗兰 前言 本篇文章算是拾人牙慧吧,偶尔谷歌到一个能很好把collection framework design讲好的文档,一是为了总结提升,也 ...
- Automation Framework Design 自动化框架设计思想
从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...
- .NET 学习书籍推荐
时间过得好快啊,转眼三月过了1周多了,今天把看书的目录记录下,方便初学者 最近由于项目需要研究下dotnet 技术,参考书籍如下: 1.深入理解C# 2.CLR via C# 3.Framework ...
- C# 必看书籍
C# in Depth:讲的是C#的东西.CLR via C#:讲的是运行时的东西.Framework Design Guideline:讲的是你要如何设计一个类库才能跟.NET浑然一体.——“赵三本 ...
- 标准IDispose模式浅析
DoNet资源 众所周知,.Net内存管理分托管资源和非托管资源,把内存中的对象按照这两种资源划分,然后由GC负责回收托管资源(Managed Resource),而对于非托管资源来讲,就需要程序员手 ...
- .net 程序员成长路线图?
https://www.zhihu.com/question/25474641 得看赵四本, @赵劼 推荐的. CLR via C# .net Essentials C# in Depth Frame ...
- Entity Framework技巧系列之一 - Tip 1 - 5
提示1. 在Entity Framework中怎样排序关系(Relationships) 问题: 在Entity Framework论坛中常会看到关于排序相关联项目的问题. 例如,想象你要查询客户,并 ...
- ios项目里扒出来的json文件
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...
随机推荐
- C#动态调用WCF接口
C#动态调用WCF接口 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项 ...
- CODE - TSQL convert Query to JSON
原文 ODE - TSQL convert Query to JSON TSQL - Query to JSON It is my philosophy that good development s ...
- (大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据
一.练习内容 1.新建数据库 首先,我们创建一个数据库,给它一个名字,比如“mysql_shiyan”,以后的几次实验也是对mysql_shiyan这个数据库进行操作. 语句格式为“CREATE DA ...
- (大数据工程师学习路径)第三步 Git Community Book----基本用法(下)
一.比较提交 - Git Diff 1.比较提交 - Git Diff 你可以用 git diff 来比较项目中任意两个版本的差异. $ git diff master..test 上面这条命令只显示 ...
- Swift学习——Swift解释特定的基础(七)
Implicitly Unwrapped Optionals 隐式解析选项 如上所述.可选意味着常数或变量"没有值".通过可选if声明来推断是否存在值,假设有值析值. 有时候 ...
- Node.js新手教程——怎样实现文件上传功能
作者:zhanhailiang 日期:2014-11-16 本文将介绍怎样使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/node ...
- Swift_3_功能
import Foundation println("Hello, World!") //声明函数 不带参数 无返回值 func func1(){ } //一个函数 传入两个Str ...
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- Jquery--仿制360右下角弹出窗口
原文:Jquery--仿制360右下角弹出窗口 先发浏览器效果图,给大家看. 要实现这样的效果,按照思路,第一步,写好CSS布局,将图片放到浏览器右下角的位置 CSS代码很灵活,我写的只是简单的一种而 ...
- 【百度地图API】当地址解析失败时,如何调用search方法查找地址
原文:[百度地图API]当地址解析失败时,如何调用search方法查找地址 有个朋友问我,当地址解析失败时,应该如何处理呢?比如,他想搜索“南宁市青秀区”. --------------------- ...