· 4.2. 如果怕出乱子……建议的代码规范
记得以前听过一句话,“世间永恒不变的真理就是不存在永恒不变的真理”,这里,我也想说一句:编程世界里最完美的解决方案就是不要认为有最完美的解决方案。(说什么啊,简单听不懂。呵呵,我自己也有点听不懂)。
我想说的是:JDO也是有一定的限制的,不能让你完全地展开双翅(注意,是“鱼翅”),在面向对象的大海中遨游。为什么JDO会有限制呢?因为它的原理是将你的类代码进行一定的改造,将JDO涉及的一些管理和维护代码插入到类代码中,这样,你的调用代码可能需要进行一些改变。这些就是JDO的限制。简单地说,如果你得到了一个TransactionRecord类型的对象tr,想通过它取得涉及的信用卡对象,不建议通过下面的代码:tr.card得到,而是建议将这个属性声明为private的,然后给出一个getter来获取(getCard()),也就是进行JavaBean式的属性包装。这样,我们的两个数据类就会变成下面的样子:
CreditCard.java:
package credit.system;
import java.util.Date;
public class CreditCard {
String name; //姓名
String address; //地址
String idcard; //身份证号
String phone; //电话
Date createTime; //开户日期
Date lastTransactionTime; //最近一次交易的时间
float initialBalance; //开户金额
float balance; //目前余额
float allowOverDraft; //允许透支额
public String toString() { return "信用卡:余额="+balance+",持卡人="+name+",身份证号="+idcard+",电话="+phone; }
public void setName(String value) { name = value; }
public String getName() { return name; }
public void setAddress(String value) { address = value; }
public String getAddress() { return address; }
public void setIdcard(String value) { idcard = value; }
public String getIdcard() { return idcard; }
public void setPhone(String value) { phone = value; }
public String getPhone() { return phone; }
public void setCreateTime(Date value) { createTime = value; }
public Date getCreateTime() { return createTime; }
public void setLastTransactionTime(Date value) { lastTransactionTime = value; }
public Date getLastTransactionTime() { return lastTransactionTime; }
public void setInitialBalance(float value) { initialBalance = value; }
public float getInitialBalance() { return initialBalance; }
public void setBalance(float value) { balance = value; }
public float getBalance() { return balance; }
public void setAllowOverDraft(float value) { allowOverDraft = value; }
public float getAllowOverDraft() { return allowOverDraft; }
}
TransactionRecord.java:
package credit.system;
import java.util.Date;
public class TransactionRecord {
Date createTime; //交易发生时间
float amount; //交易金额
String note; //备注
CreditCard card; //信用卡
public String toString() { return "交易记录:持卡人="+card.name+",身份证号="+card.idcard
+",交易额="+amount+",时间="+createTime; }
public void setCreateTime(Date value) { createTime = value; }
public Date getCreateTime() { return createTime; }
public void setAmount(float value) { amount = value; }
public float getAmount() { return amount; }
public void setNote(String value) { note = value; }
public String getNote() { return note; }
public void setCard(CreditCard value) { card = value; }
public CreditCard getCard() { return card; }
}
实际上,这些增加getter和setter的过程有很多工具可以帮忙,比如JBuilder,或者是Together,甚至是最小而精的免费工具Gel!
这样的采用访问器包装私有属性的建议,一般来说绝大多数Java开发人员都还是可以接受的。
· 4.3. 编辑metadata: system.jdo
这个过程,我们完全可以通过JDOGenie带的图形工具来完成。
我们将上面两个类编译以后,打开JDOGenie的workBench,即运行JDOGenie1.4.7解包后的/workbench.bat,如果是在Unix或Linux下就运行workbench.sh。注意要求你预先设置一个环境变量:JAVA_HOME,指向系统安装的JDK的根目录(不是bin目录)。
我们在其中新建一个project(File-->New Project),选择前面编译生成的类代码所在的根目录中(以下简称CLASSPATH,两个.class文件应该在该目录的credit\system\子目录中)存放这个project,因为这个project实际上是一个配置文件(注意不是.jdo文件),一般包含一些JDO产品相关的信息,比如是否打开某些扩展功能,License号是多少等等,这个文件在运行时是需要的。我们选择一个project名:creditSys,JDOGenie会在CLASSPATH中将这个project保存为一个名为“creditSys.jdogenie”的文件。
我们先设置数据库,为保证实用性,我们选择MySQL作为底层数据库,安装MySQL的过程很简单,从MySQL网站下载4.0.13版本,安装到系统中,然后启动mysql服务即可。我们会采用其安装后自动生成的“test”数据库作为本文的数据库。
我们还需要在MySQL网站上下载jdbc驱动:版本号是3.0.7,下载后,将其ZIP包中的mysql.jar文件解出来放到某个目录中备用。
设置数据库的界面如下:
(图片较大 请放大后查看)
(未完待续)
文章来源于领测软件测试网 https://www.ltesting.net/