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)
分享到:
- 2009-08-25 11:04
- 浏览 966
- 评论(2)
- 论坛回复 / 浏览 (2 / 4217)
- 查看更多
相关推荐
COC阵型复制工具.apk
COC手册
COC阵型复制工具-1.1.apk
COC七版规则空白卡CY20.02.1.xlsx
coc安装文件
COC七版半自动人物卡v1.9.5(PC端)(1).xlsm
COC源码手机游戏源码ISO 安卓都可以运行 ,请注意,我只是个搬运工,出现什么问题与本人无关。要完整端要等日后。
前端开源库-webpack-cocWebpack CoC,配置上的Webpack约定
Coc__delphi.与汇编入门 适合新手使用
安卓模拟器 挂coc专用 ios版转到电脑上最好用的版本,没有之一!
vim配置相关 .vimrc coc-settings 各种插件
cocos2dx c++ 开发的coc,代码和资源备份
.vim配置文件-coc
972462998272873小曦Coc免费助手V4.0.9.apk
COC口服避孕药人流后临床应用.ppt
OFDM Moddel in matlab
化工化学橡胶塑料行业COC领域分析报告(研究报告).pdf
coc-sql coc.nvimSQL扩展 特征 通过 通过lint 安装 :CocInstall coc-sql 指令 当前文件的sql.Format 组态 sql.lintOnOpen :打开时sql.lintOnOpen Lint sql文件,默认为true sql.lintOnChange :更改时Lint sql...
可可锈分析仪Vim / Neovim的是coc.nvim的扩展。安装:CocInstall coc-rust-analyzer 如果coc-settings.json ,请从coc-settings.json删除rust-analyzer配置构型使用jsonc文件配置此扩展名。 您可以使用命令:CocConfig...
GoC编译器下载网址