每个人设计API的思路可能都不一样,而我们公司的一些代码的API的设计很有意思,一个例子:
public AppGroupConfigValueObj get(UserSession _userSession, AppGroupConfigValueObj invo) throws DataException
{
long start = System.currentTimeMillis();
try
{
Long id = (Long) invo.getId();
if (isDebug() )
SessionLogManager.getInstance().getLogger(this.getClass()).debug("get group" + id);
AppGroupConfig eb = this.appGroupHome().findByPrimaryKey(id);
if (isDebug() )
SessionLogManager.getInstance().getLogger( this.getClass() ).debug("Get( UserSession _userSession, AppGroupConfigValueObj invo) elapsed time = "+ (System.currentTimeMillis()-start));
return get(eb, invo);
}
catch (Exception e)
{
throwException(e);
}
return null;
}
private AppGroupConfigValueObj get(AppGroupConfig eb, AppGroupConfigValueObj invo)
throws Exception
{
AppGroupConfigValueObj vo = (AppGroupConfigValueObj) ServerUtil.getValueObj(eb);
if (invo.getApps() != null)
{
Collection collection = eb.getApplications();
if (invo.getApps().getCount() == 0)
vo.setApps(new ValueObjList(collection.size()));
else
{
Iterator it = collection.iterator();
while (it.hasNext())
{
AppConfig a = (AppConfig) it.next();
vo.addApp((AppConfigValueObj) ServerUtil.getValueObj(a));
}
}
}
return vo;
}
解释一下,这个API的功能是这样的,主要参数AppGroupConfigValueObj 是一个Map结构的对象,另外包含一些父子关系,如果你需要的是一个轻量级的结果,那么传入的对象只需要设置ID就可以,典型的用法是这样的:
get(cuSession, new AppGroupConfigValueObj(appGroupId))
如果你需要一个重量级的结果,也就是需要它的一些子表的数据,那么就要设置子表的关系,并添加一个空的对象:
AppGroupConfigValueObj appVo = new AppGroupConfigValueObj(appGroupId);
appVo.addApp(new AppConfigValueObj());
get(cuSession,appVo);
还有第三种用法,就是你希望那些子表数据不填充,但是需要知道子表数据有几个,那么你的调用代码就是:
AppGroupConfigValueObj appVo = new AppGroupConfigValueObj(appGroupId);
appVo.setApps(new ValueObjList());
get(cuSession,appVo);
我不知道这种做法源自何处,但是很明显是原来的某位高人,而比我资历更老的一些同事沿用了这个做法并且没有在文档中记录这种方法,当我苦苦寻找一个简单的get(cuSession, appGroupId)方法时没有任何结果,最后看其它部分的代码才知道了这个诀窍。
分享到:
相关推荐
Tekla Structures是一款业界领先的三维结构建模软件,广泛应用于钢结构、混凝土结构、桥梁以及其他复杂结构的设计、详图绘制和施工管理。Tekla Open API使得用户能够超越软件原有的功能限制,实现更个性化的功能...
API 接口设计规范 API 接口设计规范是一组标准化的规则和约定,旨在规范 API 接口的开发和使用。该规范涵盖了 API 接口的设计、实现、测试和维护等方面,旨在提高 API 接口的质量、可维护性和可扩展性。 API 接口...
Java API设计是一个重要的主题,它关乎到软件开发的可维护性、可扩展性和易用性。API(Application Programming Interface)是一组预定义的函数、类、接口和常量,允许开发者通过调用这些元素来实现特定功能,而无需...
《C++ API设计》探索了常常被忽视的技术性和非技术性问题,有助于推动成功的设计决策,从而产生高质量的、健壮的而且可以长期使用的API。” ——Eric Gregory,Pixar动画工作室软件架构师 “《C++ API设计》面向中...
C++ API设计.pdf
操作系统课程设计API主要关注的是如何在Windows环境下设计和使用应用程序编程接口(API)。API是操作系统与应用程序之间的桥梁,它提供了一系列预定义的函数和数据结构,使得开发者能够更方便地进行系统级操作,如文件...
《ASP.NET Web API设计》依托ASP.NET Web API阐述API设计与开发的通用技术,是一本全面介绍如何构建真实可演化API的实践指南。本书共分三部分。第一部分介绍Web/HTTP和API开发的基础知识,介绍ASP.NET Web API,为...
### RESTful API设计规范详解 #### 一、RESTful简介 RESTful是一种广泛应用于Web服务的设计风格,全称为Representational State Transfer(表述性状态转移)。它并非一项具体的技术标准,而是一系列设计原则和约束...
【C++ API设计教程代码】是一份专注于C++应用程序接口(API)设计的教程资源,包含了一系列相关的代码示例和文档。这个压缩包文件提供的内容可能涵盖了从基础概念到高级设计模式,以及文档编写和项目配置等多个方面...
### API接口设计文档模板知识点详解 #### 一、概述 API(Application Programming Interface)接口设计文档是软件开发过程中不可或缺的一部分,它为开发者提供了清晰、准确的接口调用指南。一个良好的API文档应包括...
**API网关设计和实现** API(应用程序编程接口)网关是现代微服务架构中的关键组件,它充当了外部世界与后端服务之间的单一入口点。API网关的主要任务是集中处理所有对外的API请求,提供了包括路由、认证、授权、限...
**Visual Basic 6.0 Win32 API程序设计** Visual Basic 6.0(VB6)是Microsoft开发的一种可视化编程环境,它允许开发者快速构建Windows应用程序。尽管现在Visual Basic已经发展到更新的版本,但VB6依然在许多企业中...
API 设计规范 在 Java API 设计中,遵循一定的规范和最佳实践是非常重要的。本文将详细介绍 API 设计规范中的重要知识点,涵盖包设计、命名、文档、Java 类设计等方面。 包设计 在设计 API 包时,需要注意以下几...
在设计API时,还要注意安全性,避免敏感信息的泄露,确保数据传输的安全。API的性能也是重要考量,包括响应时间、吞吐量和资源利用率等方面。最后,测试是验证API质量的关键环节,应包括单元测试、集成测试和压力...
本资料"api接口设计.rar"可能包含关于如何有效地设计和实现API的详细指南。 首先,API接口设计的基础是明确接口的功能和目标。API可以分为两种主要类型:客户端-服务器API和模块间API。前者通常用于Web服务,如...
对于这一软件工程上的难题,martin reddy 凭借长期的从业经验,对优质api 所应具备的各要素进行了全面分析,针对api 的不同风格及模式,以及大型长期项目的内在需求,给出了种种最佳设计策略,从而对api 设计过程的...
PHP API 接口设计教程 PHP API 接口设计教程主要是讲解如何使用 PHP 语言来设计和实现 API 接口,本文将从基本...API 接口设计是软件开发中非常重要的一步,需要遵守基本原则和安全措施来确保 API 的可靠性和安全性。