
发表日期: 2021-04-26 15:34:26 浏览次数:107
泰兴网络公司哪家好【泰兴企业网站百度SEO推广公司】泰兴做网站开发价格、泰兴淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、泰兴高端企业网站页面制作设计专业公司需要多少钱
泰兴市位于江苏省中部、长江下游北岸。北纬31°58′12"~32°23′05",东经119°54′05"~120°21′56",是江苏省泰州市下辖市,是江苏省直管县三个试点之一,享有部分地级市职权。东接如皋市;南接靖江市;西濒长江,与扬中市、常州市新北区隔江相望;北邻泰州市姜堰区,东北与南通市海安市接壤;西北与泰州市高港区毗连。 [1-2]
泰兴置县于南唐升元元年(公元937年),寓意“国泰民安,百业兴旺”,有“教育之乡” [3] 、“银杏之乡” [4] 、“建筑之乡” [5] 、“提琴之乡” [6] 、“减速机之乡” [7] 之称。 [2]
2018年,泰兴市实现地区生产总值1040亿元。一般公共预算收入74.5亿元,增长18.1%,税占比84.1%,总量列全省县市第7位、增幅列第1位。财政管理工作连续两年获得国务院表彰奖励。固定资产投资增长14%,其中产业投资增长13%。实现社会消费品零售总额257亿元,增长7%。城乡居民人均可支配收入增长9.2%。全国县域经济基本竞争力排名前移至第29位。 [8-9]
泰兴属长江三角洲冲积平原,行政区划面积1172平方公里,泰兴东西最大直线距离为47.0千米,南北最大直线距离为43.5千米。2017年末户籍总人口118.56万人,比上年减少0.75万人。年末常住人口107.80万人。 [10] 2018年11月,入选中国工业百强县(市)。 [11] 2018年12月,入选全国县域经济综合竞争力100强、 [12] 投资潜力100强,中国最佳县级城市30强,2019全国营商环境百强县。2020年12月,社科院发布《全国县域经济综合竞争力100强》,泰兴排名第37 [13] 。
别忘了在每次小步重构后,执行一下单元测试,确保原来的功能没有受到影响。虽然消除了代码上的重复,但尚未解决重复查询数据库的问题。但这个问题也很好解决,只需添加一层程序级别的缓存即可,以便在同一次请求中可以重用已经获取的数据。这时关注点主要集中在Domain_Event::getAllUidsForEvent($userId)类方法内部,为其返回的结果添加程序级缓存后的代码片段是:
// WeTime$ vim ./Fun/Domain/Event.phpclass Domain_Event {
protected static $uidsCache = array();
protected function getAllUidsForEvent($userId) {
if (!isset(self::$uidsCache[$userId])) {
$domainFollow = new Domain_Follow();
$followUids = $domainFollow->getFollowUids($userId);
self::$uidsCache[$userId] = array_merge($followUids, array($userId));
}
return self::$uidsCache[$userId];
}复制代码再次执行单元测试,确保一切安好。重构后,可以发现原来需要查询5次数据库,这时只需要查询4次数据库,减少了一次没必要的数据库查询,优化了接口服务的响应性能。细心的读者可能已经察觉到,在Model_Event类中也存在部分重复代码,虽然不明显但却客观存在,即重复的where条件。此部分的代码重构留给感兴趣的读者作为练习。
接下来,需要为新增的领域业务类和数据模型类补充对应的测试代码。这里不再展开,留给读者亲自进行操作实践。
补充好这些测试用例后,最后执行单元测试套件,确保全部测试通过,没有引入新的问题。如果全部测试通过,恭喜你!可以提取下班了。
在前面,在遵循测试驱动开发和按照一般开发步骤,我们详细讲解了发布事件与获取事件列表这两个接口服务的开发过程。相信大家对具体接口服务的开发流程有了一定的理解。现在剩下日历事件模块最后一个接口服务——操作日历事件接口服务。下面,让我们快马加鞭,完成这个接口服务的开发。
鉴于这是第三个接口服务的开发,下面的开发流程不再对一般的开发步骤作过多的说明,而着重说明如何实现业务功能和一些需要注意的事项。
操作日历事件接口服务,主要作用是把某个日历事件的状态改为已删除、未完成或已完成。日历事件在发布时,初始状态是未完成,即激活状态。在开发具体的业务功能时需要注意的一点是,通常在进行删除操作时,不会进行物理删除,而是进行逻辑删除。也就是说,不会直接在数据库中把数据纪录删除,而是把某个数据库表字段的值设置为删除状态,如这里的state为0时,表示事件已删除。
既然日历事件有三种状态,那么在测试这三种状态的更新时,可以使用phpunit中一个有趣的注解,即@dataProvider注解。一如既往,先准备测试用例。假设已存在一条ID为5的日历事件,由Aevit发布,下面将模拟Aevit对这条事件进行不同的状态操作。
// WeTime$ vim ./Fun/Tests/Api/Api_Event_Test.php
/**
* @dataProvider allEventState
*/
public function testOperate($state, $sign)
{
// Step 1. 构建
$url = 'service=Event.Operate&client=ios&version=1.0.1&user_id=1&sign=' . $sign;
$params = array(
'event_id' => 5,
'state' => $state,
);
// Step 2. 执行
$rs = PhalApi_Helper_TestRunner::go($url, $params);
// Step 3. 验证
$this->assertEquals(1, $rs['code']);
}
public function allEventState()
{
return array(
array('0', '1ee57808737cfe96c324a252046d63d1'),
array('1', 'ae13b4d11cdcf70954a81765d2b00a2f'),
array('2', '8d5ec54e845337eda957f2c97dab5197'),
);
}复制代码通过@dataProvider注解,为测试用例准备了三组测试数据,为此,当执行此单元测试时,会分别使用这三组数据进行三次测试,分别把ID为5的日历事件状态依次更新为已删除、未完成、已完成。最后,断言操作的结果为成功,用1表示。日历事件不存在时返回0,而事件状态未发生改变时返回布尔值FALSE。这与更新数据库纪录返回的结果是一致的。又由于准备的三组测试数据是依次循环的三种不同状态,所以可以保证正常情况下通过操作日历事件接口服务更新后,返回的结果应该都是成功的。下面是执行本次单元测试的命令,并可以看到对应失败的3个测试用例和断言次数。
WeTime$ phpunit --filter testOperate ./Fun/Tests/Api/Api_Event_Test.php ... ...FAILURES!Tests: 3, Assertions: 3, Failures: 3.复制代码
虽然测试用例有点复杂,但内部的实现相对而言,非常简单。简单到可以一气呵成,完成全部的开发。以下是Api层的实现代码。

泰兴网络公司哪家好【泰兴企业网站百度SEO推广公司】泰兴做网站开发价格、泰兴淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、泰兴高端企业网站页面制作设计专业公司需要多少钱
服务热线
顶部
备案号: 苏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