
发表日期: 2021-04-26 17:20:16 浏览次数:118
如东申请400电话费用【如东企业全国热线电话办理】如东开通400电话电信价格、如东微信公众号代运营外包托管、如东网店编辑装修美工、如东网站推广优化大概需要多少钱
如东县,江苏省南通市下辖县 [1] ,位于江苏省东南部、长江三角洲北翼。县境南与通州区为邻,西与如皋市接壤,西北与海安市毗连,东面和北面濒临黄海。截至2020年末,全县下辖3个街道、12个乡镇 [2] ,陆域面积1872平方千米,海域面积4758平方千米 [3] ,常住人口97.71万人,实现地区生产总值1053.42亿元 [4] 。
如东是江海盐垦文化的代表。秦汉以前县境为长江口沙洲,故称扶海洲。长江、黄淮冲积成陆后,如东盐业兴起,亭场林立,至明清繁盛一时。民国之后,沿海逐步废灶兴垦,现代农渔业得到发展。 [5] 1988年对外开放后,如东沿海进一步开发,建成南黄海优良深水港口洋口港。 [6]
2019年7月,被列为国家知识产权强县工程示范县(区) [7] 。2019年10月8日,被评为2019年度全国综合实力百强县市、2019年度全国投资潜力百强县市、2019年度全国绿色发展百强县市、2019全国营商环境百强县 [8-9] 。2020年7月29日,入选2019年重新确认国家卫生乡镇(县城)名单。 [10] 2020年12月,社科院百强县榜单中如东排名第45 [11] 。
上面的测试用例不是特别好的写法,因为它里面同时测试了几个场景。但通过这些测试场景,可以看到,我们验证了一个ID为110的用户,凭家庭圈密码1111加入了家庭号为1763的家庭圈这一Happy Path。此外,验证了不能重复加入同一个家庭圈、以及家庭圈密码错误、家庭圈不存在这些异常的场景。
有了明确业务规则的单元测试作指引,接下来遵循ADM分层模式,便可进行逐步分解,最后得到井然有序、易于理解、可测试的代码。以下是加入家庭圈Api接口层的实现代码片段。
// Family-2.0$ vim ./Apps/Fami/Api/Group/Member.phpclass Api_Group_Member extends PhalApi_Api {
public function getRules() {
return array(
'joinGroup' => array(
'groupNum' => array('name' => 'group_num', 'require' => true, 'min' => 4),
'groupPwd' => array('name' => 'group_pwd', 'require' => true, 'min' => 4),
'deviceType' => array('name' => 'device_type', 'type' => 'enum', 'range' => array('all', 'cube', 'scale'), 'default' => 'all'),
),
);
}
public function joinGroup() {
$rs = array('code' => Common_Def::CODE_OK, 'group_id' => 0, 'msg' => '');
DI()->userLite->check(true);
//step 1. check
$domain = new Domain_Group();
$groupId = $domain->getGroupIdByGroupNum($this->groupNum);
$rs['group_id'] = $groupId;
if ($groupId <= 0) {
$rs['code'] = 1;
$rs['msg'] = T('group {number} not exists', array('number' => $this->groupNum));
return $rs;
}
//step 2. check pwd
if (!$domain->checkPassword($groupId, $this->groupPwd)) {
$rs['code'] = 2;
$rs['msg'] = T('group passwrod wrong');
return $rs;
}
//step 3. check has joined
$memberDomain = new Domain_Group_Member();
if ($memberDomain->hasJoined($this->userId, $groupId, $this->deviceType)) {
$rs['code'] = 3;
$rs['msg'] = T('has joined the group memeber');
return $rs;
}
//step 4. join
$memberDomain->joinGroup($this->userId, $groupId);
$rs['group_id'] = $groupId;
return $rs;
}复制代码代码虽然有点长,但并不影响它的阅读性以及可理解性。在Api_Group_Member::getRules()成员函数中,配置了接口服务所需要的参数,分别是用户的UUID、四位数的家庭号和四位数的家庭密码、设备类型。接下来,是加入家庭圈的实现代码。在Api_Group_Member::joinGroup()中,最前面通过User扩展类库进行了登录态的检测。然后便是加入家庭圈的业务流程,第一步先检测待加入的家庭号是否合法;第二步校对家庭圈密码;第三步判断是否已加入;最好第四步进行加入操作。可以看到,很明显地,前面三步都是查询操作,而最后一步属于命令式操作,即会产生副作用。这也是符合命令查询职责分离模式原则的。而这些操作,也是在同一个高度的层次,对业务规则进行了很好的表达。至于具体内部的业务实现规则,可以再深入到对应的领域业务类,看下它又是如何表达和实现规则的。
例如,对于负责家庭圈成员的Domain_Group_Member领域业务类。一如我们所期望的,在判断用户是否已加入家庭圈的实现代码中,果然依赖了来自Model层的数据。
// Family-2.0$ vim ./Apps/Fami/Domain/Group/Member.phpclass Domain_Group_Member {
public function hasJoined($userId, $groupId, $detectDeviceType = 'all', $deleteState = Domain_Group_Helper::GROUP_NOT_DELETE) {
$model = new Model_GroupMember();
return $model->hasJoined($userId, $groupId, $detectDeviceType, $deleteState);
}}复制代码这对于项目开发来说,是一件很棒的事情!因为遵循ADM分层模式的代码具有可预测性,不管是哪位开发人员来实现,最后产出的代码都是和我们共同所期待的结构是一致的。这样,则可以大大降低了代码的维护成本。再来看下在Domain_Group_Member领域业务类中加入家庭圈的实现代码, 下面代码是否和你想象的相差无几?
// Family-2.0$ vim ./Apps/Fami/Domain/Group/Member.phpclass Domain_Group_Member {
public function joinGroup($userId, $groupId) {
if ($userId <= 0 || $groupId <= 0) {
return false;
}
$newData = array();
$newData['user_id'] = $userId;
$newData['group_id'] = $groupId;
$model = new Model_GroupMember();
$id = $model->insert($newData);
return $id > 0 ? true : false;
}}复制代码最后,稍微看一下对应Model层的实现代码片段。
// Family-2.0$ vim ./Apps/Fami/Model/GroupMember.php class Model_GroupMember extends PhalApi_Model_NotORM {
protected function getTableName($id = null) {
return 'group_member';
}
public function hasJoined($userId, $groupId, $detectDeviceType = 'all', $deleteState = Domain_Group_Helper::GROUP_NOT_DELETE) {
$num = $this->getORM()
->where('user_id', $userId)
->where('group_id', $groupId)
->count('id');
return $num > 0 ? true : false;
}}复制代码就这样,通过层层分解,我们再一次优雅地消化了复杂的领域业务,以一种可预测、职责划分明确的方式完成了代码的编写,功能的开发。当然,每个接口服务所布面临的领域业务不尽相同,这里只是作为一个示例,希望能给大家提供一些启发性。

如东申请400电话费用【如东企业全国热线电话办理】如东开通400电话电信价格、如东微信公众号代运营外包托管、如东网店编辑装修美工、如东网站推广优化大概需要多少钱
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878