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

尴尬的COC

    博客分类:
  • Tech
阅读更多

 

Convention Over Configuration大家都已经耳熟能详了, 这东西好不好那? 好, 绝对是好, 不过, 还要看用的人到底怎么用, 或者说是否真的理解了它到底是怎么回事, 说两三个小场景...

 

发现某个框架虽声称COC是其主打特色, 但某些功能模块在实现的时候却没有将COC执行彻底, 比方说, 大部分情况下可以根据URL取得的信息, 现在依然要求开发人员在某个配置文件中进行统一配置, 虽然这个功能侧重就是统一配置和管理某些URL映射, 但key和value都一样的情况下, 完全可以让框架根据某一Convention自动提取, 而没必要重复配置这些key和value的值, 实际上,只有说key和value不同的时候,进行一下配置就可以了, 你说,这里的COC尴尬不?

 

JUnit4之后引入了@Test用于标注测试用例的测试方法, 这东西好不好? 好, 让你可以在一处管理所有的信息, 而且像强类型支持, IDE的支持等等好处都可以享受到, 再也不会因为把testXXX拼错成tsetXXX之类并导致测试用例的“怪异”行为而头疼了,不过, 事情真的像宣称的或者说看起来的那么美嘛? 你用@Test标注的测试方法依然需要声明吧?测试方法依然需要有一个表意清晰的名称吧? 按理说, 每个测试方法的名称以test开头不就是个Convention嘛? 现在使用@Test代替这个Convention, 那COC是不是又感觉很尴尬呀? 我怎么就觉得直接敲方法名要比敲方法名和@Test这个Annotation更便捷那? 拼写错误? come on, 数数大家还是会的吧? 上一次跑了12/12个测试方法,你添加个新的测试方法之后,run的时候还是12/12, 你难道不知道问题出在哪里嘛?

 

部门另一个架构师开发了个GenericDao框架,用于简化大家的日常开发,提高开发效率, 好东西吧? 绝对好东西, 不过, 在用的时候,发现点儿不方便的地方。当然了,这个不方便不是框架设计者本身的问题,可能更多是局限于现有的技术前提条件。其实, 几年前就有过类似的想法, 打个比方, 假设我声明如下接口定义:

public interface XXXDao<T>
{
	List<T> findByProperty1AndProperty2(String propertyOne, String propertyTwo);
}  

 

那么,按照我最初的想法, GenericDao框架内部就应该直接根据参数名称构建个map,然后传给sqlmap作为调用的参数(假设采用IBatis做数据访问),也就是说, 按照某种Convention, 方法参数的名称与sqlmap中的参数名称是一一对应的, 这样,开发人员只需要声明个数据访问方法就可以了,简单直接, 不是嘛?

不过那,现实是残酷的,呵呵,编译的时候, 参数名称这样的信息在编译的时候, 默认是忽略掉的, 这也就是为啥通过反射API只能得到个参数类型,而得不到参数名称。虽然新的java版本一直吵吵着要加入这个信息,但目前来看,还是不行,所以, 我们就只能变通一下, COC中的第一个C(Convention)搞不定了, 只能启用一下第二个C(Configuration), 通过某个Annotation,比如@Param("name"), 来告知框架怎么关联方法调用与sqlmap调用参数之间的映射关系。你说, 这里的COC尴尬不?我觉得最尴尬了,绕都绕不过去, 除非你再加个Post-Compile的过程或者Pre-Compile的过程, 在Java Source的基础上做做手脚,然后带到编译后的成果物中去(class文件中,或者自动生成的某种配置信息中)。

不过那,最理想的还是从“根儿”上解决这个问题, 你JavaClassFormat都把三个规则中的两个默认[1]启用了,为啥就不启用这最后一个[2]那?如果怕编译后的class文件膨胀,那咱权宜一下,只对interface类型做这个事情好不? 

 

嗯, 就说这么些了, 套用当下已经用烂了的一句话, “COC自己其实一点儿都不尴尬,只是寂寞”, 哈哈

 

[1] line number tables for each method和the name of the source file

[2] local variable tables for each method)

分享到:
评论
2 楼 fujohnwang 2009-08-25  
daquan198163 写道
@Test着实鸡肋
另:虽然取不到方法参数名,但可以取取到model属性名,把参数放到一个model里来传就可以了。

对于只有两三个参数的情况, 使用model也不是很方便, 呵呵
1 楼 daquan198163 2009-08-25  
@Test着实鸡肋
另:虽然取不到方法参数名,但可以取取到model属性名,把参数放到一个model里来传就可以了。

相关推荐

    .vim配置文件-coc

    Coc,全称为“CoC.nvim”,是 Vim 的一个插件,它提供了丰富的代码补全、诊断、格式化等功能,增强了 Vim 的功能,使其更接近现代 IDE 的体验。在 `.vim` 文件夹中,通常包含的是 Coc 插件的配置和相关设置。 Coc ...

    COC阵型复制工具.apk

    COC阵型复制工具.apk

    COC6th玩家整合手册v1.7+Super+Extra+II.chm

    COC手册

    coc.zip_COC_coc coc_zip

    标题"coc.zip_COC_coc coc_zip"可能是指一个包含与"coc"相关的MATLAB代码或项目文件的压缩包,其中"COC"可能是"Channel Orthogonal Coding"的缩写,暗示了这个项目可能涉及到了正交编码,这在OFDM系统中用于提高抗...

    COC阵型复制工具-1.1.apk

    COC阵型复制工具-1.1.apk

    前端开源库-webpack-coc

    **Webpack CoC:前端配置的约定与最佳实践** 在前端开发中,Webpack 是一个至关重要的模块打包工具,它能够将各种资源(JavaScript、CSS、图片等)打包成优化过的静态资源,以适应现代Web应用程序的需求。`webpack-...

    COC七版规则空白卡CY20.02.1.xlsx

    COC七版规则空白卡CY20.02.1.xlsx

    coc安装文件

    coc安装文件

    COC七版半自动人物卡v1.9.5(PC端)(1).xlsm

    COC七版半自动人物卡v1.9.5(PC端)(1).xlsm

    vim配置相关 .vimrc coc-settings 及相关插件

    本文将深入探讨 Vim 的配置相关知识,包括 `.vimrc` 文件、`coc-settings.json`、`coc.nvim` 插件以及相关插件管理。 首先,`.vimrc` 是 Vim 的配置文件,它存储了用户自定义的快捷键、设置和行为。通过编辑 `....

    CoC下载网址.txt

    根据提供的文件信息,我们可以了解到这份文档主要提供了CoC(推测为GoC)编译器的下载地址,并且已经经过验证,确认下载过程中没有病毒风险。接下来,我们将对这份文档涉及的关键知识点进行详细的解读与扩展。 ### ...

    COC.rar_COC_coc mobile_coc 源码_cocmobile_coc源码

    COC源码手机游戏源码ISO 安卓都可以运行 ,请注意,我只是个搬运工,出现什么问题与本人无关。要完整端要等日后。

    安卓模拟器 挂coc专用

    安卓模拟器 挂coc专用 ios版转到电脑上最好用的版本,没有之一!

    Coc__delphi.与汇编入门

    《Coc__delphi.与汇编入门》是一本针对初学者的教程,旨在帮助新手了解并掌握Delphi编程语言以及汇编语言的基础知识。在IT领域,掌握这两种语言能够提升程序员对计算机底层机制的理解,从而更好地进行系统级编程和...

    972462998272873小曦Coc免费助手V4.0.9.apk

    972462998272873小曦Coc免费助手V4.0.9.apk

    coc-marketplace:coc.nvim扩展市场

    :CocInstall coc-marketplace 用法 :CocList marketplace列出所有可用的扩展 :CocList marketplace python以搜索名称包含python扩展名 构型 marketplace.npmsio :使用进行搜索,默认为false 执照 麻省理工学院

    vimrc配置-coc

    **vimrc配置-coc** 在 Vim 编辑器中,`.vimrc` 文件是个人配置文件,用于定制编辑器的行为和功能。`coc.nvim` 是一个流行的 Vim 插件,它提供了丰富的代码补全、错误检查、代码导航等功能,极大地提升了 Vim 的开发...

    COC口服避孕药人流后临床应用.ppt

    COC口服避孕药人流后临床应用.ppt

    cocos2dx开发的coc

    "cocos2dx开发的coc"可能指的是一个使用Cocos2d-x框架开发的游戏项目或者工具,而"Cocos_Ring"可能是这个游戏项目中的一个关键模块或者是资源包。 在Cocos2d-x的开发中,C++是核心编程语言,它提供了丰富的API和...

    unity仿COC部落冲突游戏项目完整源码.rar

    unity仿COC部落冲突游戏项目完整源码.rar

Global site tag (gtag.js) - Google Analytics