当前位置: 网站首页>小程序开发>网站制作

邳州网络公司哪家好【邳州企业网站百度SEO推广公司】邳州做网站开发价格、邳州淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邳州高端企业网站页面制作设计专业公司需要多少钱

发表日期: 2021-04-27 09:00:43 浏览次数:126

邳州网络公司哪家好【邳州企业网站百度SEO推广公司】邳州做网站开发价格、邳州淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邳州高端企业网站页面制作设计专业公司需要多少钱

邳州,简称“邳”,江苏省徐州市代管县级市, [1-2]  古称良城、邳国、下邳、邳县,位于苏鲁交界,东接新沂市,西连徐州市铜山区、贾汪区,南界睢宁县,北邻山东省兰陵县。 [3]  1992年撤县设市。

邳州历史悠久,境内大墩子文化遗址距今6000年,是江苏文明最早的起源之一。境内有邳州市艾山风景名胜区、沙沟湖水杉公园、国家银杏博览园、小萝卜头纪念馆等旅游景点。邳州的城市精神是“创新、争先、开放、包容”。 [4] 

邳州发展的目标是东陇海产业带重要的水陆交通枢纽、新兴工贸城市,京杭运河沿岸具有水乡特色和历史文化底蕴的生态宜居城市。

2019年7月,邳州入选国家知识产权强县工程试点县(区)。2019年,邳州位居全国综合实力百强县市第37位、经济竞争力百强第40位、全国投资潜力百强县市第18位、全国绿色发展百强县市第33位、全国科技创新百强县市第36位、全国新型城镇化质量百强县市第51位。

最后,在进行单元测试时,便可利用此模拟的触发器类的对象进行测试验证,而不用再担心会存在耗时的执行过程,更不用担心会有什么副作用(在测试时向用户进行推送,而造成骚扰),因为一切都是模拟的。下面是使用替身进行测试的代码片段。

class PhpUnderControl_TaskMyTriggerWeekPush_Test extends PHPUnit_Framework_TestCase{
    public $taskMyTriggerWeekPush;

    protected function setUp()
    {
        parent::setUp();
        $this->taskMyTriggerWeekPush = new TMyTrigger_WeekPush_Mock();
    }

    /**
     * @group testFire
     */ 
    public function testFire()
    {
        $params = '';
        $rs = $this->taskMyTriggerWeekPush->fire($params);
        $this->assertGreaterThan(0, $rs);
    }}复制代码

最后,小结一下。在开发接口服务的过程中,你会发现,很多时候都是像这里的案例一样,开发环节是一环扣一环,环环相扣的。如果前面设计不合理,就会导致后面也跟着错误的实现。通常情况下,会定义基础的业务数据,明确需要哪些类型的数据。在对实体的属性有了一定了解后,便可以基于业务需求和规则开发相应的接口服务。这些接口服务运行一段时间后,会产生上述基础业务数据。而这些基础数据又会催生更多的数据,例如对每周的体重进行分析从而给出营养周报和计划。这时,除了需要实现第二批接口服务外,对于耗时的接口服务的调度还要辅以计划任务来管理。好的框架应该能支持这些功能的开发,但我觉得,更为重要的是,框架应该引导开发人员进行这样有序的开发。即能在原来的基础上,进行迭代开发,新的功能与原有的功能可以很好的一起工作,相互促进。每当在项目中添加一个类,这个新的类都是以帮助系统中的其他类为目的的,而不是以干扰、抑制甚至破坏其他类为目的。不管这是有意识的,还是无意识的。PhalApi框架,我认为,很好地做到了这一点:引导软件开发工程师进行有序地开发。

6.5 精益求精

古人有云:业精于勤而荒于嬉。

但对于软件开发工程师来说,要想做到精益求精,不仅需要勤奋努力,我觉得适当有效地运用工具,也是必不可少的。下面,我们将在学习一下,在使用PhalApi完成项目开发后,可以使用哪些工具来帮助我们更好地进行开发,部署、发布和性能优化

6.5.1 获取家庭圈信息的接口服务

为了更好地理解如何使用接下来要介绍的工具,并应用在实际项目开发过程中,先来简单认识一个接口服务——获取家庭圈信息。

在Family 2.0 项目中,有一个重要的业务模块,即家庭圈。家庭圈对应的数据库表为fami_group,它的部分表结构定义如下:

CREATE TABLE `fami_group` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `number` varchar(10) DEFAULT '0000' COMMENT '家庭号',
  `groupname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '家庭组名称',
  `password` varchar(64) DEFAULT '' COMMENT '密码',
  ... ...
  PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;复制代码

并且,假设已经在以下测试数据,它的家庭号为8888,家庭圈名称为“我的家”,密码为1234。

表6-3 家庭表fami_group的测试数据

id

number

groupname

password

1

8888

我的家

1234

现在,需要开发一个获取家庭圈信息的接口服务,并使用此接口服务中获取上面ID为1的信息,结合单元测试驱动开发以及前面所学的知识,我们很快就能编写出下面这样的代码。

Api接口层为:

// Family-2.0$ vim ./Apps/Fami/Api/Group.php <?phpclass Api_Group extends PhalApi_Api {
    public function getRules() {
        return array(
            'getGroupInfo' => array(
                'groupId' => array('name' => 'group_id', 'require' => true),
            ),
        );
    }

    public function getGroupInfo() {
        $rs = array('code' => Common_Def::CODE_OK, 'msg' => '');

        $domain = new Domain_Group();
        $rs['info'] = $domain->getGroupInfoByGroupId($this->groupId);

        return $rs;
    }}复制代码

Domain领域业务层为:

// Family-2.0$ vim ./Apps/Fami/Domain/Group.php <?phpclass Domain_Group {
    public function getGroupInfoByGroupId($groupId) {
        $model = new Model_Group();
        $row = $model->getGroupInfoByGroupId($groupId);
        return $row;
    }}复制代码

最后,Model数据模型层为:

// Family-2.0$ vim ./Apps/Fami/Model/Group.php <?phpclass Model_Group extends PhalApi_Model_NotORM {
    public function getGroupInfoByGroupId($groupId) {
        return $this->getORM()
            ->select('number, groupname, password')
            ->where('id', $groupId)
            ->fetchRow();
    }}复制代码

开发完成后,可以在浏览器或者通过curl命令简单测试一下,验证获取信息是否正确。如:

$ curl "http://api.v2.family.com/fami/?service=Group.getGroupInfo&group_id=1"复制代码

正常情况下,会返回类似以下这样的结果:

{
    "ret": 200,
    "data": {
        "code": 0,
        "msg": "",
        "info": {
            "number": "8888",
            "groupname": "我的家",
            "password": "1234"
        }
    },
    "msg": ""}复制代码

至此,又一功能性的需求已经开发完成。但对于非功能性的需求呢?例如,Group.getGroupInfo这一接口的响应时间如何?支持最大并发量是多少?

6.5.2 使用Xhprof剖析性能

Xhprof是一个非常优秀的性能分析工具,它可以从程序内部剖析代码执行过程中每个环节的具体情况。这里不过多的讲述此工具的特点和使用,而讲述如何使用Xhprof发现系统中的性能瓶颈。

假设Xhprof扩展已安装成功。使用以下命令可检测本地环境是否已开启了xhprof扩展,正常情况下可以看到输出xhprof。

$ php -m | grep xhprof
xhprof复制代码

环境准备就绪后,为了使用xhprof,可修改对应的入口文件,在index.php文件前后分别加上xhprof相应的代码片段。如:

// Family-2.0$ vim ./Public/fami/index.php <?php// start profilingxhprof_enable();require_once dirname(__FILE__) . '/../init.php';//装载你的接口DI()->loader->addDirs('Apps/Fami');/** ---------------- 响应接口请求 ---------------- **/$api = new PhalApi();$rs = $api->response();$rs->output();// stop profiler$xhprof_data = xhprof_disable();$XHPROF_ROOT = '/path/to/xhprof';include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";// save raw data for this profiler run using default// implementation of iXHProfRuns.$xhprof_runs = new XHProfRuns_Default();// save the run under a namespace "xhprof_foo"$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");echo "http://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo\n";复制代码

此时,再次调用Group.getGroupInfo接口服务并获取group_id为1的家庭圈信息时,根据生成的报告$run_id及配置的站点环境,便可在浏览器在线查看到对应的性能分析报告。在这里,按”Excl. Wall Time“字段降序排列后,可看到类似以下这样的报告。

c51c866ffa1ab3457f2021e8bbdbcc1.jpg


邳州网络公司哪家好邳州企业网站百度SEO推广公司邳州做网站开发价格、邳州淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、邳州高端企业网站页面制作设计专业公司需要多少钱

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: https://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878