网有
柳丁脚踏车e
关注数: 48
粉丝数: 39
发帖数: 536
关注贴吧数: 54
ooooooold
oooooo
bhhhhhh
opdddddddold
选图片(上次拍的照片)
拍照未编辑
test动画
改哼哼唧唧坎坎坷坷
哈哈哈哈哈哈 行动
哈大的点点滴滴 好
哈哈哈哈哈 你好
沟中还在外面晒太阳
122335 红红火火恍恍惚惚
哦哦噢噢噢哦哦 jjjj
哈哈哈哈哈哈哈 红红火火恍恍惚惚
hhhhhh vvbhhhhh
hhhjj hhhhhhh
uuuuu ddddddddd
hhhhh 测试
真的吗心情又好点了 等下
test test
聚一聚哈哈哈 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fcjponline.tieba.baidu-int.com%2Fmo%2Fq%2Fhybrid-usergrow-activity%2FsummerGameMain%3FtabId%3D1%26shareType%3D1%26customfullscreen%3D1%26nonavigationbar%3D1%26user_skin_overlay%3D1%26is_share%3D1%26share_portrait%3Dtb.1.d926a9b6.DTjPNyDDDQFAbUF8Lzi28Q%26trackFrom%3Doutshare%26share_cuid%3D1E3C884A7167339AFC13445696E350DC%26token%3D%26source%3D12_16_sharecard_a&urlrefer=b4af7908c5c9233e4b76fc69049cf42f
hhhhh http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2F172.22.149.94%3A8421%2Fmo%2Fq%2Fhybrid-usergrow-activity%2FsummerGameMain%3FtabId%3D1%26shareType%3D1%26customfullscreen%3D1%26nonavigationbar%3D1%26user_skin_overlay%3D1&urlrefer=79b41d7e1b22bfeebb87a25e2bac5879
哈哈哈哈哈哈哈哈哈
……..4 https://tieba.baidu.com/mo/q/wise-main-share/chatShare?chatroom_id=7970590153&source=12_16_sharecard_a
《架构整洁之道》17-18章 【第十七章:划分边界】 软件架构设计本身就是一门划分边界的艺术。边界的作用是将软件分割成各种元素,以便约束边界两侧之间的依赖关系。简单来说,通过划清边界,我们可以推迟和延后一些细节性的决策,这最终会为我们节省大量的时间、避免大量的问题。这就是一个设计良好的架构所应该带来的助益。边界线应该画在那些不相关的事情中间。GUI与业务逻辑无关,所以两者之间应该有一条边界线。数据库与GUI无关,这两者之间也应该有一条边界线。数据库又与业务逻辑无关,所以两者之间也应该有一条边界线。这其实就是单一职责原则(SRP)的具体实现,SRP的作用就是告诉我们应该在哪里画边界线。 【第十八章:边界剖析】 跨边界调用指的是边界线一侧的函数调用另一侧的函数,并同时传递数据的行为。为什么需要管控源码中的依赖关系呢?因为当一个模块的源码发生变更时,其他模块的源码也可能会随之发生变更或重新编译,并需要重新部署。所谓划分边界,就是指在这些模块之间建立这种针对变更的防火墙。 1)系统架构最常见的物理边界形式:动态链接库。与单体结构类似,按部署层次解耦的组件之间的跨边界调用也只是普通的函数调用,成本很低。 2)系统架构还有一个更明显的物理边界形式,那就是本地进程。本地进程之间的跨边界通信需要用到系统调用、数据的编码和解码,以及进程间的上下文切换,成本相对来说会更高一些,所以这里需要谨慎地控制通信的次数。 3)系统架构中最强的边界形式就是服务。服务之间的跨边界通信相对于函数调用来说,速度是非常缓慢的。因此我们在划分架构边界时,一定要尽可能地控制通信次数。
《架构整洁之道》15-16章 【第十五章:什么是软件架构】 软件架构等同于设计架构,即要设计出易于理解,易于修改,易于维护的的软件。最大限度的释放开发人员的维护人力,减少软件运营成本。 软件架构设计的主要目标是支撑软件系统的全生命周期,设计良好的架构可以让系统便于理解,易于修改,方便维护,并且能轻松不熟。软件架构的终极目标就是最大化程序员的生产力,同时最小化系统的运营成本。 在软件系统的所有方面中,维护所需的成本是最高的。满足永不停歇的新功能需求,以及修改层出不穷的系统缺陷这些工作将会占去绝大部分的人力资源。 【第十六章 独立性】 一个设计良好的软件架构必须支持以下几点:系统的用例与正常运行,系统的维护,系统的开发,系统的部署。我们一定要小心避免陷入对任何重复都要立即消除的应激反应模式中。一定要确保这些消除动作只针对那些真正意义上的重复。
《架构整洁之道》13-14章 《架构整洁之道》13-14章 【第十三章:组件聚合】 构建组件相关的基本原则:REP复用/发布等同原则,CCP共同闭包原则,CRP 共同复用原则。 复用/发布等同原则(REP):软件复用的最小粒度应等同于其发布的最小粒度。 从软件设计和架构设计的角度来看,REP原则就是指组件中的类与模块必须是彼此紧密相关的。也就是说,一个组件不能由一组毫无关联的类和模块组成,它们之间应该有一个共同的主题或者大方向。 共同闭包原则(CCP):我们应该将那些会同时修改,并且为相同目的而修改的类放到同一个组件中,而将不会同时修改,并且不会为了相同目的而修改的那些类放到不同的组件中。 CCP原则也认为一个组件不应该同时存在着多个变更原因。 CCP的主要作用就是提示我们要将所有可能会被一起修改的类集中在一处。也就是说,如果两个类紧密相关,不管是源代码层面还是抽象理念层面,永远都会一起被修改,那么它们就应该被归属为同一个组件。 共同复用原则(CRP):不要强迫一个组件的用户依赖他们不需要的东西。 CRP原则实际上是在指导我们:不是紧密相连的类不应该被放在同一个组件里。 【第十四章 组件耦合】 三条组件之间关系的原则:无依赖环原则、稳定依赖原则、稳定抽象原则 无依赖环原则:组件依赖关系图中不应该出现环。 稳定依赖原则:依赖关系必须要指向更稳定的方向。通过遵守稳定依赖原则(SDP),我们就可以确保自己设计中那些容易变更的模块不会被那些难于修改的组件所依赖。 稳定抽象原则:一个组件的抽象化程度应该与其稳定性保持一致。
《架构整洁之道》11-12章 【第十一章 DIP:依赖反转原则】 依赖反转原则:如果想要设计一个灵活的系统,在源代码层次的依赖关系中就应该多引用抽象类型,而非具体实现。 DIP 的目的是降低模块之间的耦合度,提高代码的灵活性和可维护性。这个原则的实现需要使用抽象类或接口,通过这些抽象来定义高层模块需要的功能,而具体的实现则由低层模块提供。这种方式可以使得高层模块与低层模块解耦,它们之间只需要依赖于抽象,而不需要知道具体的实现细节。 【第十二章 组件】 组件是软件在部署过程中的最小单元。设计良好的组件都应该永远保持可被独立部署的特性,也意味着这些组件应该可以被单独开发,对应在Java里就是jar文件。 组件具有以下特点: 1)高内聚:组件内部的各个部分紧密地联系在一起,共同完成一个功能。 2)低耦合:组件与其他组件之间的依赖关系尽可能地降低,减少了相互影响的可能性。 3)可复用:组件可以被多个系统或应用程序复用,减少了重复开发的工作量。 4)可测试:组件的独立性和清晰的接口使得它们易于进行单元测试和集成测试。
《架构整洁之道》9-10章 【第九章 LSP:里氏替换原则】 该设计原则是 Barbara Liskov 在1988年提出的一个著名的子类型定义。 里氏替换原则的定义是:任何基类可以出现的地方,子类一定可以出现,而且替换成子类也不会产生任何错误或异常。简单来说,LSP就是指子类对象可以在程序中替换父类对象而不影响程序的正确性。也就是说,在使用继承时,如果一个子类不能完全地替换掉它的父类,那么这个继承关系就不应该存在。 软件架构层面,一旦违背了可替换性,该系统架构就不得不为此增添大量复杂的应对机制。 【第十章 ISP:接口隔离原则】 接口隔离原则告诉我们:任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。 实现接口隔离原则的方法如下: 1、接口应该尽量小:接口应该只包含必要的方法,而不包含不必要的方法。这样可以减少接口的复杂性,提高接口的可读性和可维护性。 2、接口应该高内聚:接口的方法应该在语义上相关联,而不是随意地组合在一起。这样可以使得接口更加一致,更容易理解和使用。 3、接口应该稳定:接口的方法应该是稳定的,也就是说,接口的定义应该尽可能不发生变化。这样可以减少对接口的依赖,使得代码更加稳定和可靠。 4、接口应该对扩展开放,对修改关闭:接口的设计应该能够支持扩展,而不需要对现有代码进行修改。这样可以减少代码的修改,提高代码的可维护性和可扩展性。
http://www.baidu.com Try
《架构整洁之道》7-8章 【第七章 SRP:单一职责原则】 一、是什么?不做会怎么样? 单一职责原则 != 每个模块只做一件事 单一职责原则 == 任何一个软件模块都应该只对某一类行为者负责 反面案例1: 不同行为者的代码(行为)耦合在同一个模块里,且共用同一个方法,造成本该独立的行为互相影响。 反面案例2: 不同行为者的代码(行为)耦合在同一个模块里,多人为了不同的目的修改了同一份源代码,造成合并代码冲突 & 功能出错。 tips: 将服务不同行为者的代码进行切分,不放到同一个模块中; 不同业务的代码,即使暂时是用同样的方法实现,最好也将方法分开来写。否则业务1的逻辑修改,可能影响到业务2(此处业务即指行为)。 二、如何做到单一职责原则? 将数据与函数分离,设计多个行为(业务)类,每个类处理具有个体差异性的行为函数,共用同一个与行为(业务)无关的数据类【存在缺点:需要在程序里处理多个行为类,可以通过facade设计模式来解决】 三、本章小结 单一职责原则:主要讨论函数和类之间的关系。 在组件层面,可以将其称为共同闭包原则 在软件架构层面,则是用于奠定架构边界的变更轴心 【第八章 OCP: 开闭原则】 一、是什么? 开闭原则:易于扩展,但不允许修改 二、如何做到开闭原则? 1、先执行SRP(将系统中满足不同需求的代码分组,划分为不同的组件) 2、再执行DIP(调整组件之间的依赖关系,按照层次结构进行组织,使得高阶组件不会因低阶组件被修改而收到影响) A Tip:如果A组件不想被B组件上发生的修改所影响,那么就应该让B组件依赖于A组件
《架构整洁之道》5-6章 【第五章 面向对象编程】 本章逐个分析了常与面向对象编程绑定的三个概念『封装、继承、多态』,并解答了面向对象编程是什么,有什么优势。 面向对象编程语言:封装、继承、多态 封装:这个特性并不是面向对象编程所独有的,且面向对象编程语言可能不如非面向对象编程语言的封装性强。 1、C语言作为非面向对象的编程语言,具有良好的封装特性。 2、C++作为面向对象的编程语言,反而破坏了C的完美封装特性(C++编译器由于技术原因,必须在头文件中看到成员变量的定义)。 3、Java 和 C#彻底抛弃了头文件与实现文件分离的编程方式,进一步削弱了封装特性。 继承:早在面向对象编程语言被发明之前,对继承性的支持就已经存在很久了。面向对象编程在继承性方面并没有开创出新,但是的却在数据结构的伪装性上提供了相当程度的便利性。 多态: 1、面向对象编程使得插件式架构(与设备无关的程序)可以在任何地方被安全地使用。 2、依赖倒置,当某个组件的源代码需要修改时,仅仅需要重新部署该组件,不需要更改其他组件,这就是独立部署能力。 对软件架构师来说,面向对象编程就是以多态为手段来对源代码的依赖关系进行控制的能力,这种能力让软件架构师可以构建出某种插件式架构,让高层策略性组件与底层实现性组件相分离,底层组件可以被编译成插件,实现独立于高层组件的开发和部署。 【第六章 函数式编程】 函数式编程语言中的变量是不可变的。 一个架构设计良好的应用程序应该将状态修改的部分和不需要修改的部分隔离成单独的组件,然后用合适的机制来保护可变量。而软件架构师应着力于,将大部分逻辑归于不可变组件中。 事件溯源体系:只存储事务记录,不存储具体状态。当需要具体状态时,从头计算所有事物即可。 软件/计算机程序,无一例外是由顺序结构、分支结构、循环结构和间接转移这几种行为组合而成的,无可增加,也缺一不可。
《架构整洁之道》3-4章 【第三章 编程范式总览】 编程范式:程序的编写模式,与编程语言关系相对较小。 目前一共只有3个编程范式:结构化编程、面向对象编程、函数式编程: 1)结构化编程对程序控制权的直接转移进行了限制和规范。是个模块的算法实现基础,对应软件架构的功能性。 2)面向对象编程(多态)对程序控制权的间接转移进行了限制和规范。是我们跨越架构边界的手段,对应软件架构的组件独立性。 3)函数式编程对程序中的赋值进行了限制和规范。是我们规范和限制数据存放位置与访问权限的手段,对应软件架构的数据管理。 【第四章 结构化编程】 goto语句的某些用法会导致某个模块无法被递归拆分成更小的、可证明的单元。而分支结构if-then-else和循环结构do-while(结构化编程范式)则可以将程序分解成更小的、可证明的单元。 无论在哪一层面上,从最小的函数到最大组件,软件开发的过程都和科学研究非常类似,它们都是由证伪驱动的。
《架构整洁之道》1-2章 【设计与架构】 底层设计细节和高层架构信息不可分割,他们组成在一起,共同定义了整个软件系统,缺一不可。 【软件架构的目标】 软件架构的终极目标是,用最小的人力成本来满足构建和维护系统的需求。 【本书主题】 本书描述了什么是优秀的、整洁的软件架构与设计 【乱麻系统的特点】 不能因为一味追求版本迭代的速度,而忽略代码质量和设计结构。短期内看似节约了时间和人力,长期看其实是会造成系统维护困难、工程师投入产出比相当低的问题,实际上是浪费了时间。(浪费的是未来维护的时间,对时间超前消费了) 【是否采用TDD方法编程在每个迭代周期的耗时对比图】 未进一步优化/重构的优秀代码架构,比优化过多次的冗余代码架构,还要节省构建成本和维护成本 由此得出结论,“先上线再优化”的思路,其实是更浪费时间的。 【行为和架构两种价值维度】 行为纬度:能用,能实现需求文档的功能 架构维度:当需求方改变需求时,软件应该容易被修改。 后者比前者更重要。研发人员需要平衡系统架构的重要性与功能的紧急程度,并为此与其他的系统相关方进行“长期抗争”。
清河万象汇 @贴吧大艺术家 一元复始 万象更新
分享贴子 分享贴子
沉甸甸的责任和 https://pan.baidu.com/s/1LaTSjI3c25eAd33OKiXIcg?pwd=1234&skin=default
呃呃呃呃大的 https://tieba.baidu.com/p/8156436240?&share=9105&fr=sharewise&is_video=false&unique=22083EA242083D7F9571A81A0025E247&st=1669640045&client_type=1&client_version=12.33.0.1&sfc=copy&share_from=post&source=12_16_sharecard_a
分享视频帖试试 分享视频帖试试
hhhhhh yujjjvg
hhhh hhhh
uuuuuuuu 四个角
111//@贴吧用户_0CytCAS ://@贴吧用户_0C 111//@贴吧用户_0CytCAS ://@贴吧用户_0CytCAS :分享贴子
分享贴子 分享贴子
分享贴子 分享贴子
分享贴子 分享贴子
//@贴吧用户_0CytCAS :ffff //@贴吧用户_0CytCAS :ffff
四张图ddd
试试三张图的bug现象
测个bug
#考公上岸#
#海贼王1058话情报#
#海贼王1058话情报#
#JDG 3-0 LNG# ghhh
#JDG 3-0 LNG#
#网友曝肖秀荣移民加拿大#
#网友曝肖秀荣移民加拿大#
#网友曝肖秀荣移民加拿大#
#考公上岸#
1
下一页