发表日期: 2021-04-26 09:40:49 浏览次数:155
如皋网站制作要多少钱【域名企业邮箱服务器注册申请办理】如皋网络优化公司哪家好、如皋软件开发外包价格、如皋高端企业网站页面制作设计专业公司、如皋微信公众号小程序购物支付搭建制作公司
如皋市,简称“如”或“皋”,江苏省辖县级市,由南通市代管,江苏省历史文化名城。地处长江三角洲北翼,位于南通、泰州、苏州三市交界处,南与张家港市隔江相望,北与海安市、东与如东县连接、东南与南通市通州区毗邻,西与泰兴市、西南与靖江市接壤。全市总面积1477平方公里(不含长江水面),长江水面99平方千米。如皋长江岸线全长48千米,可直接利用长江深水岸线18.6千米。
如皋市被国际自然医学会评为世界六大长寿乡之一。 [1] 如皋市户籍人口约142万。截至2021年1月1日,全市80周岁以上高龄老人68031人,90周岁以上高龄老人10150人,百岁老人达525位,其中105岁以上达16位。 [2]
2019年6月17日,如皋被中华人民共和国住房和城乡建设部选取作为开展规范城市户外广告设施管理工作试点城市。 [3] 2019年10月8日,被评为2019年度全国综合实力百强县市、2019年度全国绿色发展百强县市、2019年度全国新型城镇化质量百强县市、2019全国营商环境百强县。 [4-6] 2020年12月,社科院发布《全国县域经济综合竞争力100强》,如皋排名第31 [7] 。
很多框架关心性能,而不关心人文;很多项目关心技术,而不关注业务。
就这造成了复杂的领域业务在项目中得不到很好地体现和描述,也没有统一的规则,更没有释意的接口。最终导致了在“纯面向对象”框架里面凌乱的代码编写,为后期的维护扩展、升级优化带来很大的阻碍。这就变成了,框架只关注性能,项目只关心技术,而项目却可怜地失去了演进的权利,慢慢地步履维艰,最终陷入牵一发而动全身的困境。
很多人都不知道该如何真正应对和处理领域的业务 ,尽管领域业务和单元测试都是如此重要并被广泛推崇。正如同表面上我们都知道单元测试却没有具体真实地接触过,并且一旦到真正需要编写一行单元测试的代码时就更迷惑了。
在一个项目架构里面,有三个主要模型:设计模型、领域模型和代码模型。设计模型在选择PhalApi时已大体确定,领域模式则需要项目干系人员消化、理解并表达出来。对于开发人员,代码模型则是他们表达的媒介。 所以Domain这一层,主要关注的是领域业务规则的处理。让我们暂且抛开外界客户端接口调用的签名验证、参数获取、安全性等问题,也不考虑数据从何而来、存放于何处,而是着重关注对领域业务数据的处理。
曾经我在进行一个接口项目开发时,与iOS资深开发同学@Aevit有过一段有趣的编程体验。当时我们正在为F项目共同开发第三方联登的接口服务。由于Aevit是首次接触PHP开发,也是首次接触PhalApi开发,他在参考我编写的微信登录后,很快就交付了微博和QQ登录这两个接口服务。
但令我为之惊讶和兴奋的不是他的速度,而是他所编写的代码是如此的优雅美丽,犹如出自资深PHP开发人员之手。这让我再一次相信,使用在TDD下讲述故事的方式来开发接口服务,专注于领域业务规则,不仅能让代码更易于传送业务逻辑,也能为更多的同学乃至新手接受并更高效率地产出高质量的代码。
下面,我们将走进Domain领域业务层的内部,深入探索其中的奥秘,为讲真实、动听、丰满的故事做好准备。
释意接口
领域的逻辑是对现实业务场景的再解释。现实的因素充满变数并且由人为指定,所以不能简单的在计算机中“推导”出领域逻辑。在项目开发过程中,要特别对这些领域逻辑理解透彻,以便后面接手的同学可以更容易理解和明白这些流程、限制和规则。其中一个有力的指导就是释意接口。
对接口签名甚至是对变量命名的仔细推敲都是很有益处的,因为名字能正名份,不至于混淆或者含糊不清。释意接口的作用和成效很大,它可以让后来维护项目的同学在端详一个接口时,无须深入内部实现即可明白它的用意和产生的影响。如一个getter系列的操作,我们可以推断出它是无副作用的。但如果当时的开发者不遵守约定,在里面作了一些“手脚”,则会导致产生“望文生义”的推断。
简单来说,释意接口会将“命令-查询”分离、会将多个操作分解成更小粒度的操作而保持同一层面的处理。根据《领域驱动设计》一书的说法:
“类型名、方法名和参数名一起构成了一个释意接口(Intention-Revealing Interface),以解释设计意图,避免开发人员需要考虑内部如何实现,或者猜测。”
在我曾经任职的一个游戏公司里面,我常根据接口的命名来推断它的作用,但往往会倍受伤害。因为以前的开发人员没有遵守这些约定,当时的Team Leader还责怪我不能太相信这些接口的命名。然而我想,如果连自己团队的其他成员都不能相信,我们还能相信谁呢?我们是否应该反思,是否应该考虑遵守约定编程所带来的好处?任何一个问题,都不是个人的问题,而是一个团队的问题。如果我们经常不断地发生一生项目的问题而要去指责某个人时,我们又为何不从一开始就遵守约定而去避免呢?
如下面在F项目中的家庭组成员领域业务类:
<?phpclass Domain_Group_Member {
public function joinGroup($userId, $groupId) {
//TODO
}
public function hasJoined($userId, $groupId) {
//TODO
}}复制代码我们可以知道,Domain_Group_Member::joinGroup()用于加入家庭组,会产生副作用,是一个命令操作;Domain_Group_Member::hasJoined()则用于检测用户是否已加入家庭组,无副作用,则是一个查询操作。
业务规则的描述
“规则出现且仅出现一次。”
领域之所以复杂,在于规则众多。如果不能很好地把控这些规则,当规则发生变化时,就会出现很大的问题。在开发过程中,要注意对规则进行提炼并且放置在一个指定的位置。如对游戏玩家的经验计算等级时,这样一个规则就要统一好。不要到处都有类型相同的计算接口。当代码出现重复时,我们都知道会面临维护的高成本。而当规则多次出现时,我们更知道当规则发生变化时所带来的各种严重的问题,这也正是为什么总有一些这样那样的BUG的原因。系统出现问题,大多数上都是业务的问题。而业务的问题在于我们不能把规则收敛起来,汇集于一处。

如皋网站制作要多少钱【域名企业邮箱服务器注册申请办理】如皋网络优化公司哪家好、如皋软件开发外包价格、如皋高端企业网站页面制作设计专业公司、如皋微信公众号小程序购物支付搭建制作公司