`
fujohnwang
  • 浏览: 156966 次
社区版块
存档分类
最新评论

框架API设计相关的碎言

    博客分类:
  • Tech
阅读更多

框架的API设计,应该是一个从粗粒度到细粒度的精炼过程,而不能一开始就提供细粒度却没有考虑周全的API,这样的情况会:


1- 造成框架使用者的窘迫, 当框架实现中存在bug的时候, 使用者将难以绕过这些bug而前行, 只能等待框架的bug fix版本的发布;


2- 造成框架的频繁而仓猝的升级, 难免又引入新的bug;

从理性的角度来看, 框架的API设计, 开始之初, 应该是一种粗粒度的, 且功能限定几乎没有的形式。之后,可以根据使用者的反馈以及框架设计者本身的考虑,来进一步的细化或者暴露新的,但功能相似的API,也就是说,我们可以在之后鼓励使用者使用新的API,而尽量少用旧有的API, 这样的好处就是, 当新的API有考虑不周全的时候, 使用者依然可以转而求助于旧的,但功能几乎没有限定的API, 使得使用者不用心急火燎的等待框架新版本的发布, 与此同时,框架本身可能因为开发进度无法及时发布。

举例来说, 一个Web层的Action/Controller类的定义, 现在通常都是声明为一个简单的POJO, 框架设计者可能直接就规定死:在这些Action/Controller的定义中, 只能声明指定类型的参数。这样做的后果就是, 当框架指定的参数类型不能满足使用者需求的时候, 使用者会一筹莫展,因为, 除非框架升级,否则,他们无法获得更多的进展。

可是,如果框架设计者最初不是一上来就开始限定,而是,一开始先提供粗粒度的API要求,那么,上面的情况就可以绕得过去。不管什么参数类型,他们的数据来源最终都要通过ServletRequest输入,通过ServletResponse输出,那么,我们就可以对如下的Action/Controller的处理方法提供支持:

 

public void actionMethod(ServletRequest requet, ServletResponse response);

 

然后,在这的基础上,再提供细粒度并且有效提炼的API支持:

 

public void actionMethod(Type1 argument1, Type2 argument2, ...);

 

当框架提供的细粒度的API支持无法满足用户需求的时候,用户依然可以转而求助于最初的粗粒度的API,而不是眼巴巴的干等。

框架设计者提供细粒度的,精炼后的API当然是最初的目的,并且也是为了简化使用者的工作,但难免有考虑不周之处,所以,采取循序渐进, 留条后路的做法,很多情况下,对使用者来说,对框架设计来说,都会是受益的。使用者不用心急火燎的等待, 框架的设计和开发者也不用火烧屁股般紧急发布bugfix版本, good balance, isn't it?

0
0
分享到:
评论

相关推荐

    深度学习之OneFlow采用全新架构设计的工业级通用深度学习框架-2.7z

    OneFlow是一款专为工业级应用设计的通用深度学习框架,其独特之处在于采用了全新的架构设计,旨在提供高效、稳定且易用的深度学习解决方案。在本文中,我们将深入探讨OneFlow的核心特性、设计理念以及它如何适应制造...

    H5小游戏源码 六角碎片.zip

    6. **框架和库的应用**:观察是否使用了如Phaser、CreateJS等H5游戏开发框架,了解其用法和优势。 通过深入研究这个六角碎片游戏的源码,开发者可以掌握H5游戏开发的基本流程和技术要点,为后续自己的项目开发提供...

    小游戏源码-胸口碎大石.rar

    5. **文档**:可能包含设计文档、API参考、开发者笔记等,帮助理解和修改代码。 6. **库和框架**:开发者可能使用了第三方库或游戏引擎,如Unity、Unreal Engine或Cocos2d-x等。 源码分析与学习: - **游戏架构**:...

    设计和运营-大中型电子商务平台

    - **Microsoft .NET Framework**:提供了丰富的API和工具,支持快速开发高性能的应用程序。 - **SQL Server 2005/2008**:作为数据库管理系统,能够有效管理大量交易数据,支持复杂的查询需求。 - **IIS (Internet ...

    Android SDK 2.2-4.4

    **Android SDK 2.2-4.4 知识点详解** Android SDK(Software Development Kit)是用于开发Android应用程序的工具...对于开发者而言,理解这些版本的特性至关重要,因为它们决定了应用程序的兼容性、性能以及用户体验。

    android应酬资料

    在Android开发领域,应酬资料通常指的是与面试、学习和提升技能相关的材料。这份名为"android应酬资料"的压缩包可能包含了一系列帮助开发者准备面试、深入理解Android系统以及掌握实用工具的重要资源。以下是根据...

    delphi里的内存管理器操作指南

    Delphi的内存管理器实现在`GetMem.inc`文件中,其设计目标是为了简化内存管理过程,让用户无需关心底层细节。内存管理器支持三种主要的内存分配方式: 1. **通过操作系统API进行的进程内内存分配**:使用如`...

    H5微信小游戏源码-疯狂手指.zip

    【疯狂手指】作为一款微信小游戏,是微信小程序生态的一部分,利用微信提供的开发工具和框架,开发者可以轻松地将H5游戏转化为微信小程序,使游戏能无缝地融入微信社交环境,便于分享和传播。 标签中的“小游戏”是...

    linux高清全套

    卷1着眼于套接字联网API,详细介绍了网络编程的基础知识,包括套接字接口的使用、TCP/IP协议族的原理以及并发服务器的设计等。对于想要开发网络应用的开发者来说,理解这些内容是必须的。卷2则进一步深入讨论了高级...

    ext4.0中文文档

    EXTJS文档则是关于EXT JavaScript库的相关资料,它是一个用于构建桌面级Web应用的富客户端框架,与EXT4文件系统本身并无直接关联,但可能在构建基于EXT4的管理界面时有所帮助。 总之,EXT4.0中文文档是理解、管理和...

    Spark_2_6_3

    Spark是一款强大的分布式计算框架,由Apache Software Foundation开发并维护,主要设计用于大数据处理。在"Spark_2_6_3"这个版本中,我们聚焦于Spark的核心特性、优化以及其在软件外包公司中的应用。 首先,Spark的...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    6.1认我测在线检测服务框架设计 33 6.2 系统运行环境搭建及配置 34 6.2.1 AndroidManifest.xml主程序环境配置 34 6.2.2 移动端工程资源布局 35 6.3 认我测在线认证检测系统的主要功能实现 36 6.3.1用户查询 36 6.3.2...

    cudnn-9.0-win 7-x64-v7.1

    标题"cuda"暗示了这个压缩包包含的是与NVIDIA CUDA相关的组件。CUDA是NVIDIA推出的编程模型,允许开发者利用GPU的强大并行计算能力来解决计算密集型问题,尤其是在科学计算、图形渲染和机器学习等领域。 对于"9.0...

    EXT4.0压缩包和基础搭建文档

    这个压缩包提供的是EXT4.0的相关资源,包括EXTJS的基础搭建文档,对于初学者而言,是一个很好的学习起点。EXTJS是一个强大的JavaScript库,用于构建富客户端Web应用程序。它提供了一套完整的组件模型,可以创建出...

    PHPCMS V9 产品开发权威指南

    新框架的设计理念更加强调模块化与灵活性,使得开发者可以更加便捷地进行二次开发与功能扩展。 ##### 2. 站群系统 PHPCMS V9 支持一站多点的管理模式,即可以在一个系统内管理多个站点。这种设计极大地简化了多...

    小游戏

    "微信小程序"则表明这些小游戏是专为微信小程序平台设计的,它们利用微信提供的小程序开发工具和框架,遵循特定的API接口和开发规范,以适应微信环境下的运行需求。 【压缩包子文件的文件名称列表】: "101小游戏-别...

    RTCLI.Runtime:ECMA-335公共语言基础结构的运行时实现,专门用于实时应用程序

    - 文档:可能包含API参考、设计理念和技术细节的文档。 通过深入研究RTCLI.Runtime的源代码和文档,开发者可以了解如何在自己的游戏引擎或实时应用中集成这个运行时,从而利用其性能优势。对于游戏开发者而言,...

Global site tag (gtag.js) - Google Analytics