2018.08.11 周六--【技术文章】《记一次意外的技术讨论收获—策略模式》

    最近公司有和第三方合作的项目,于是想到了使用策略模式去实现,到时候有别的第三方来走他自己的策略去完成相关的业务流程就行了。

    gitHub地址: http://t.cn/RDO9luX

1)类加载的问题--命名空间

    但是我们在做的过程中遇到的第一个问题就是命名空间的问题,因为公司老的框架是不支持也没有使用命名空间的,我仿照之前的一个业务实现的策略,在一个php文件中有多个类文件,但是使用了php的命名空间之后,外部就调用不到这些类了,否则是多个类,命名多个命名空间,但是因为新框架使用的自动加载是默认文件名和类名是一致的,否则也是不好加载进来。于是想到了拆分类,将基类BaceStrategyClass,BaceCooperationClass,接口Interface,和工厂类ClassFactory放到了一个文件ClassFactory.php中,将与第三方进行连接交互的类Cooperation放到了一个文件xxxCooperatioin.php中,还有一个这次合作的策略类XXXStrategy 放到了一个文件XXXStrategy.php中,这样就解决了类加载的问题。

01 测试脚本test.php

2)公司内部外系统的访问—层级调用

    我们遇到了第二个问题就是我们这个系统需要公司其他系统,比如用户系统的数据,但是新框架定义与公司外系统的交互,都在service层完成,领域层domian中只完成与自己系统业务相关的内容,所以为了符合层级调用和符合规范,就将这些domian中的策略整体进行了迁移,重新定义了命名空间,也修改了相关地方的调用的命名空间类use引用。

02 02 工厂基类 FacultyClass.php

3)必须走工厂方法—唯一入口,封装性

    然后我们遇到的第三个问题是,之前都是通过工厂方法的构造方法,将策略类的实例作为其属性,使用 (new classFaculty(‘xxx’))->strategyClass 得到策略实例,然后这个策略实例里,可以调用 xxxCooperatioin类中的相关方法,这个是可以走通的,但是如果我只是想测试 xxxCooperatioin类中的方法,就不行,包括测试xxxStrategy类中的方法都是不行的,都分别报 不存在其 基类 BaceCooperationClass 和BaceStrategyClass不存在,这个就比较尴尬了,百思不得其解,我和潇同学“抓耳挠腮”,再仔细看看 三个文件 ClassFactory.php ,  xxxCooperatioin.php 和 XXXStrategy.php, 终于发现原来走工厂那种访问的时候,ClassFactory.php 中已经包含了 xxxCooperatioin 类和xxxStrategy类所需要的基类了,所以一路走下来,是可以加载各个类的,但是如果是 直接外部测试脚本调用 xxxCooperatioin类 和xxxStrategy类是不行的,因为他们的基类在 ClassFactory.php中,而你又无法使用命名空间将其加载进来(因为BaceCooperationClass 和BaceStrategyClass 和文件ClassFactory.php的文件名不一样,无法加载),这样就强制外部必须走工厂ClassFactory类 来访问到 xxxCooperatioin类,和xxxStrategy类,这样就提高了安全性,实现了封装性。

03 具体策略类 XXXStrategy

4)构造方法返回的永远是自己—走单例模式吧 

    还有就是看走工厂方法 (new classFaculty(‘xxx’))->strategyClass 得到策略实例,实际上我们直接new classFaculty类的时候,在构造中直接return strategyClass 不就直接得到这个策略类示例了吗,不需要在多一层属性的指向调用,后来发现我们在构造里error_log输出的好好的,strategyClass 就是xxxStrategy的示例,但是走完工厂的构造方法返回的还是 工厂 classFaculty的实例,后来仔细一思考,才发现其实 构造方法永远返回的是类自己的实例,而不管你在 构造方法里return 返回的是什么。

04 交互类XXXCooperation

    我们实际上也只是想走单例模式,不用重复实例化类,没想到发现构造中返回不了策略类的实例,于是在工厂类classFaculty中写了一个 getStrategyInstance的一个静态方法,在那里实现单例模式,并返回了这策略类的实例。惠同学说还有就是这个策略类的实例的一个属性cooperation就是 xxxCooperatioin类的一个实例。这样就能拿到 策略类在脚本里做一些测试,也能拿到xxxCooperatioin类的一些方法做测试,避免直接 去实例化这两个类时,报他们的基类不存在的尴尬问题。

05 自动加载类的函数

    至此,我们的这一次的技术讨论完美结束了,潇同学和惠同学和我都露出了欣慰的笑容,虽然已经是晚上11点多了,但是能有这样自发的深入的细致的卓有成效的讨论还是很值得的,哪怕将来我们各奔东西了,但是一想到那天晚上我们的这次有意义的,精彩的技术探究之旅,便会觉得格外亲切,技术在我们看来也变得熠熠生辉起来。

    虽然在大神或者外人看来我们的这次讨论一般般或者是我们应该早掌握的东西,但是毕竟我们整日在位实现业务需求去并行着,加班加点完成业务的需求,鲜有时间仔细认真去思考这技术其中的细节,也就无法体会到思考技术,形成“心流”,最终解决问题,有所收获和提高的那种乐趣了,如果我们能每天或者每周多一些这样的讨论和收获,那我们的技术水平的提高就指日可待了。

程序猿的友谊

    可以,可以,一次偶然的讨论竟然也成为了彼此心中探究钻研技术的起点,不错啊。

    作文纪念之。

                                                                                                                                            2018.08.11 周六

                                                                                                                                            于北京西直门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 严稼申走出机场大门,不假思索的抬头便看到一脸漠然的叶莘。她还是一样呢,喜欢艳丽的颜色,羊绒红毛衣里头套了件白色纽扣...
    西壳阅读 458评论 0 0
  • 这个炎热的夏天,真是让人觉得特别的烦躁。 身边的每个人好像都这样。 我老公,平日里看起来也算是稳妥之人,不知为何,...
    如果_没有_如果阅读 258评论 0 0
  • 人儿在霜雪炙阳柔风的游戏里 懵懂, 而现在正是 上演夏山之盟; 八成早忘了 三月前的春意正浓, 变迁变化变换间 谁...
    Janeyan_阅读 426评论 2 3
  • 不可说转阅读 177评论 0 0