当前位置: 网站首页>小程序开发>网站优化

如东申请400电话费用【如东企业全国热线电话办理】如东开通400电话电信价格、如东微信公众号代运营外包托管、如东网店编辑装修美工、如东网站推广优化大概需要多少钱

发表日期: 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;
    }}复制代码

就这样,通过层层分解,我们再一次优雅地消化了复杂的领域业务,以一种可预测、职责划分明确的方式完成了代码的编写,功能的开发。当然,每个接口服务所布面临的领域业务不尽相同,这里只是作为一个示例,希望能给大家提供一些启发性。

c51c866ffa1ab3457f2021e8bbdbcc1.jpg

如东申请400电话费用如东企业全国热线电话办理如东开通400电话电信价格、如东微信公众号代运营外包托管、如东网店编辑装修美工、如东网站推广优化大概需要多少钱

400-111-6878
服务热线
顶部

备案号: 苏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