Clean Code反案例:什么是不好的API
2010-08-11 18:47
274 查看
先来看两段代码:
CI.cs:
public BoundBlock3d meshOrthoBoundBlock(Matrix3d localToBound)
{
Matrix3d xfrm = localToBound * this.ChildToParentTransform;
return this.Child.meshOrthoBoundBlock(xfrm);
}
CD.cs
重构后的CI
public BoundBlock3d MeshOrthoBoundBlock()
{
return MeshOrthoBoundBlock(Matrix3d.Identity);
}
private BoundBlock3d MeshOrthoBoundBlock(Matrix3d localToBound)
{
BoundBlock3d bounds = new BoundBlock3d();
Matrix3d mtx = localToBound * this.Child.ScalingTransform;
foreach (CI childCI in this.Child.ReferencedCIs)
bounds.orthoExtend(MeshOrthoBoundBlock(mtx * childCI.ChildToParentTransform));
// Calculate self bounds
bounds.orthoExtend(activeBody.GetOrthoBoundingBlock(mtx));
return bounds;
}
CD.cs:
移去meshOrthoBoundBlock方法
大家可以看到为了避免Client传不必要的Matrix3d.Identity, 我在外面多包装了一层。现在对于外面来说会清净很多,没有混乱的API, Client应该不用头大了。
CI.cs:
public BoundBlock3d meshOrthoBoundBlock(Matrix3d localToBound)
{
Matrix3d xfrm = localToBound * this.ChildToParentTransform;
return this.Child.meshOrthoBoundBlock(xfrm);
}
CD.cs
重构后的CI
public BoundBlock3d MeshOrthoBoundBlock()
{
return MeshOrthoBoundBlock(Matrix3d.Identity);
}
private BoundBlock3d MeshOrthoBoundBlock(Matrix3d localToBound)
{
BoundBlock3d bounds = new BoundBlock3d();
Matrix3d mtx = localToBound * this.Child.ScalingTransform;
foreach (CI childCI in this.Child.ReferencedCIs)
bounds.orthoExtend(MeshOrthoBoundBlock(mtx * childCI.ChildToParentTransform));
// Calculate self bounds
bounds.orthoExtend(activeBody.GetOrthoBoundingBlock(mtx));
return bounds;
}
CD.cs:
移去meshOrthoBoundBlock方法
大家可以看到为了避免Client传不必要的Matrix3d.Identity, 我在外面多包装了一层。现在对于外面来说会清净很多,没有混乱的API, Client应该不用头大了。
相关文章推荐
- htc打电话用什么软件,联系人不好用吗,怎么才能用好htc
- ArcGIS API for Android 案例教程 1
- ArcGIS API for Android 案例教程 5
- 过度依赖框架有什么不好?
- Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)
- 虚拟化技术有什么用?虚拟化技术是什么?IBM服务器虚拟化部署案例分析
- 产品文章理解之--10个案例说明什么是产品模型(1)
- API有什么作用,他的工作原理是什么?
- Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)
- 系统API是什么
- mapreduce简单通俗案例,mapreduce具体是什么
- 什么是API,说人话!
- API是什么
- 什么是api
- JavaSE中线程与并行API框架学习笔记1——线程是什么?
- 关于Microsoft Unified Communications Managed API 3.0开发的相关技术问题(UserEndpoint 、ApplicationEndpoint的区别是什么?)
- Keras 函数API 官网案例
- 到底什么才是好的API设计?
- slf4j-api、slf4j-log4j12以及log4j三者之间是什么关系?
- 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析