|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是netbeans,谢谢。跟着形式观点的提高,懂得形式和利用形式的程序员愈来愈多,良多人在进修形式的时分,城市有如许一种困惑:“有需要弄得这么庞大吗?”。切实其实,由于教程的例子过于复杂化(如许便利读者进修),大概是作者选例子的时分并没有很好表现所讲形式的长处,良多情形下假如仅就其例子的成绩来讲,用形式是太庞大了。因而才招致如许的曲解:“形式就是把复杂的成绩庞大化吗?”。固然不是,跟着你开辟理论的不休丰厚,你终会发明形式壮大能力,并且形式也并不是贵族化的编程体例,它就是一些经由提炼了的办理成绩的办法技能。
经由过程进修形式,程序员入手下手告辞已往准直线式的代码体例,形式开扩了我们的视野,强化了我们面向对象编程的头脑体例。但是如今又呈现了另外一个广泛的成绩,自觉使用形式。形式是成绩的办理计划,先有成绩才有形式,形式是依靠于所要办理的成绩的而生的。必需懂得形式在良多情形下是以进步代码的庞大度为价值来加强天真性、可复用性。假如在自已的代码中利用某一形式仅只进步了代码的庞大度,而别的方面见效甚微,大概某部分代码基本就不存在天真性及高复用性的需求,那末我们就没有需要为利用形式而保持更直不雅复杂的代码写法。
一流的妙手90%精神存眷成绩的办理计划,由于找到了好的办理计划,再写起代码会很轻松代码也简便流利,看如许的代码是一种享用和进步;二流的生手90%精神存眷代码完成,由于成绩的办理计划并不是最好,完成的代码也会对照庞大;三流菜鸟记流水帐,90%精神在敲键盘,经常做了泰半才发明行欠亨,回过火来再用90%的工夫敲键盘,基本不会用就任何形式,写出来的代码的只要他自已才干看懂。做出来的软件也是分崩离析,做一丁点修改都要年夜费周折,并且你还不晓得修改后会发生甚么成绩,年夜有住危房里的感到。
在这里仍是举一个滥用形式的例子吧。我曾介入过一个年夜团体公司OA体系的第二期开辟,开辟相沿原有代码架构并增添新的功效模块。文档很少我读原代码时就被它程序里的代码转来转往弄得头年夜如斗,最初读懂了:原代码架构整体接纳工场形式,并且是最庞大的笼统工场形式。它把一切模块类都经由过程工场天生还工场套工场,而且每个模块类都有一个接口,每一个接口也只要一个模块实际类,由于触及权限把持还用了代办署理(proxy)形式。 读懂代码后我入手下手嵌进代码,发明每新增一个类,都要到六个Java文件中往增添响应代码,而在类中每增添一个办法,也要到它的接口等四个Java文件中往增添响应代码。天呀!!!记妥当时我的小姆指常会不听使唤,就是由于频仍的利用Ctrl+C、Ctrl+V,小姆指按着Ctrl键给累的。全部项目组苦不胜言,真烦透了。项目停止后我回忆发明:代办署理形式用得还对(如今针对权限这类横向把持有AOP编程这类新的办理举措了)但工场形式在这里基本就是多此一举,不但没有办理甚么成绩,反而增添代码庞大度和耦合性,下降了开辟效力连保护难度都进步了。并且那种每一个类复杂的加一个接口的体例,更是没有事理,这让我很想说周星驰说过的一句话:“球~~~不是这么踢~~~~的,接口~~~不是这么用~~~的”。言回正传,我们先来看如许一个罕见成绩:某体系必要撑持多品种型的数据库。用过Oracle、MSSQL等数据库的人都晓得,它们的SQL编写体例都各有些分歧。好比说Oracle的独一标识主动+1字段用的是序列,MSSQL改一下字段属性就成了,另有各类各自独有的SQL用法。为了撑持多半据库,岂非我们要开辟多套体系?固然NO。请看上面的办理计划。
即然数据库存在多种,我们能够将体系中一切对数据库的操纵笼统出来,写成一个个办法组合到一个类中,有几种数据库我们就写几个如许的类。详细计划类图以下:
扼要申明:
OracleDataOperate、SqlserverDataOperate、MysqlDataOperate,分离代表Oracle、Sqlserver、Mysql这三种数据库的操纵类。承继自AbstractDataOperate
AbstractDataOperate是一个笼统类,包括了那些分歧品种数据库都是一样代码的操纵办法。承继自DataOperate
DataOperate是下面说的数据操纵类的一致接口,只要两个办法:获得一笔记录、拔出一笔记录。
DataOperateFactory是一个工场办法,一致用它的办法来失掉数据库操纵类的实例。
SampleClass是我们体系的某个功效模块的类。
People是一个实体类,代表一笔记录。三个字段 oid独一标识符、name姓名、date诞辰。
具体申明:
1、一切体系功效模块类只认DataOperat这个接口还不用管详细的完成类是OracleDataOperate还SqlserverDataOperate。DataOperate源代码以下:
publicinterfaceDataOperate{
//依据纪录的独一标识掏出一笔记录
PeoplegetPeople(Stringoid);
//拔出一笔记录
booleaninsertPeople(Peoplepeople);
}
2、AbstractDataOperate、OracleDataOperate、SqlserverDataOperate、MysqlDataOperate都是承继DataOperate接口的,没甚么好说的,省略。
3、DataOperateFactory。我们看看工场办法怎样写的。
publicclassDataOperateFactory{
publicstaticfinalintORACLE=0;//界说三个暗示数据库范例的常量
publicstaticfinalintMYSQL=1;
publicstaticfinalintSQLSERVER=2;
privatestaticDataOperatedb;
privatestaticintdataType=MYSQL;
/**
*依据数据库范例(dataType)获得一个数据库操纵类的实例,
*这里对DataOperate利用了单例形式,由于OracelDataOperate等都是无形态的工具类,
*以是全部体系只保存一个实例就好了。
*
*@return前往的是接口,客户端不用体贴详细是用谁人完成类
*/
publicstaticDataOperategetInstance(){
if(db==null){
if(dataType==ORACLE)//依据dateType前往响应的完成类
returnnewOracelDataOperate();
if(dataType==MYSQL)
returnnewMysqlDataOperate();
if(dataType==SQLSERVER)
returnnewSqlserverDataOperate();
}
returndb;
}
}
4、接上去就看看利用端是怎样挪用工场办法和利用数据操纵类的。
/**
*体系某个功效类
*/
publicclassSampleClass{
privateDataOperatedb;//声明一个数据库操纵类,注重这里用的是接口噢
/**某办法*/
publicvoidsampleMethod(){
db=DataOperateFactory.getInstance();//失掉单一实例
Peoplep=db.getPeople("123");//获得一笔记录
db.insertPeople(p);//再插归去
}
}
我们发明SampleClass中基本没有呈现OracelDataOperate、MysqlDataOperate等的影子,这就是接口的能力。客户端不用针对OracelDataOperate等写分歧的代码,它只体贴DataOperate便可,详细要取谁人类的逻辑就由DataOperateFactory卖力了。
总结:
从例子中我们能够看到甚么是面向接口的编程体例。SampleClass利用数据操纵类能够不用体贴详细是谁人类,只需是切合接口的都行
要实例?只须挪用DataOperateFactory.getInstance()便可,别的的交于DataOperateFactory这个工场来做吧,利用端甚么都不必体贴。
我们要撑持新的数据库范例,只必要象OracelDataOperate那样,再写一个承继AbstractDataOperate的类便可,好比SysbaseDataOperate。然后到DataOperateFactory中到场响应代码便可。
假如我们想要可设置性更高,能够用privatestaticintdataType=MYSQL;中的值设置到一个文本文件中。
关于开辟撑持多种数据库的体系,激烈倡议利用hibernate,我如今做的体系就是用hibernate的,开辟时用Mysql,到要给客户时将数据库换了DB2,程序不必做任何修改,真实的无逢移植。不外如许,本文所提到的办法就没甚么用了.
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。 |
|