7. 自动生成代码
99%的值对象和DAO代码,可以根据数据库模式(schema)自动生成,前提是你的表和列使用约定的方式进行命名。如果你修改数据库模式,一个自动生成代码的脚本将大大节省你的时间。
8. 业务逻辑
业务逻辑直接反映使用者的需要。它们处理值对象,根据业务需要修改值对象的属性,使用DAO与数据库层交互。
class NewsletterLogic {
function NewsletterLogic() {
...
}
function subscribePerson(&$person) {
...
}
function unsubscribePerson(&$person) {
...
}
function sendNewsletter(&$newsletter) {
...
}
}
function NewsletterLogic() {
...
}
function subscribePerson(&$person) {
...
}
function unsubscribePerson(&$person) {
...
}
function sendNewsletter(&$newsletter) {
...
}
}
9. 页逻辑(控制器)
当一个网页被请求时,页控制器(page controller)就会运行,然后产生输出。控制器的任务,就是将HTTP请求转化成业务对象(business object),然后调用相应的业务逻辑,生成展示输出的对象。
页逻辑依次执行以下步骤(请参照后面的PageController类的代码):
i. 假定页面请求之中,包含一个cmd参数。
ii. 根据cmd参数的值,执行相应的动作。
iii. 验证页面返回的值,生成一个值对象。
iv. 针对值对象,执行业务逻辑。
v. 如果有必要,可以导向另一个页面。
vi. 收集必要的数据,输出结果。
ii. 根据cmd参数的值,执行相应的动作。
iii. 验证页面返回的值,生成一个值对象。
iv. 针对值对象,执行业务逻辑。
v. 如果有必要,可以导向另一个页面。
vi. 收集必要的数据,输出结果。
注意:可以编写一个工具函数(utility function),处理GET或POST值,当有的变量没有赋值时,提供一个默认值。页逻辑不包含HTML代码。
class PageController {
var $person; #$person is used by the HTML page
var $errs;
function PageController() {
$action = Form::getParameter('cmd');
$this->person = new Person();
$this->errs = array();
if ($action == 'save') {
$this->parseForm();
if (!this->validate()) return;
NewsletterLogic::subscribe($this->person);
header('Location: confirmation.php');
exit;
}
}
function parseForm() {
$this->person->name = Form::getParameter('name');
$this->person->birthdate = Util::parseDate(Form::getParameter('birthdate');
...
}
function validate() {
if ($this->person->name == '') $this->errs['name'] = FORM_MISSING;
#FORM_MISSING is a constant
...
return (sizeof($this->errs) == 0);
}
}
var $person; #$person is used by the HTML page
var $errs;
function PageController() {
$action = Form::getParameter('cmd');
$this->person = new Person();
$this->errs = array();
if ($action == 'save') {
$this->parseForm();
if (!this->validate()) return;
NewsletterLogic::subscribe($this->person);
header('Location: confirmation.php');
exit;
}
}
function parseForm() {
$this->person->name = Form::getParameter('name');
$this->person->birthdate = Util::parseDate(Form::getParameter('birthdate');
...
}
function validate() {
if ($this->person->name == '') $this->errs['name'] = FORM_MISSING;
#FORM_MISSING is a constant
...
return (sizeof($this->errs) == 0);
}
}