如何设计出色的软件架构

电脑杂谈  发布时间:2020-06-18 00:26:04  来源:网络整理

设计框架网页教案_网页布局框架_网页框架设计软件

“风语折客户服务+”是针对中小企业推出的SaaS客户服务,它节省了企业自建客户服务系统的巨额成本. 为了向企业提供稳定,可靠和高质量的服务,我们在整体结构上不遗余力. 尽管它并不完美,但我希望能利用它并相互学习.

前言

“深入自然,然后您会更好地理解一切. ”-艾伯特·爱因斯坦

在我国的传统文化中,需要完成一件事,集中在三个方面: 明道,精湛的技术和动力. 在软件体系结构设计方面,这也是一个类似的原因: 遵循自然法则来阐明总体方向,使用出色的实践策略,然后根据实际情况着陆.

这是快餐时代,几乎每个人都只做一件事-“利用”. 很少有人会了解Servlet的工作原理,了解HTTP请求的完整过程,因为这里有太多的框架可帮助您屏蔽细节. 问一个人他们将使用什么技术,答案通常是我知道Hibernate,Spring,Ibatis,PullToRefresh组件并使用SDWebimage. 但是这些框架不是软件体系结构. 软件体系结构是一座充满生命力的房子,这些框架只是更大的砖块.

由于作者的水平是有限的,所以我只提及一些通用的指导原则,即“正确的废话”,以供参考. 我不会讨论实用的策略,例如如何使用Spring来实现MVC架构,如何使用Maven来管理依赖项,如何使用Redis进行常见操作,如何构建负载平衡的集群,如何使用阿里巴巴的Dubbo服务框架,等等. 如果您有兴趣,可以自己搜索,其中有很多优秀的文章可供参考.

不幸的是,“程序猿”和“程序元”都有自己的难处,而快乐的程序员是相似的. 其实幸福有点夸张. 让我们谈谈如何减轻他们的痛苦.

“在每个人的依附关系中,总有痛苦,发现痛苦并加以治愈是促进依附关系的必不可少的步骤. ”-Chris Prentiss

它们均以相对稳定的软件体系结构进行编码. 它们的代码将不依赖于许多模块,并且不会因它们的微小更改而导致全局故障. 正如“ 1984”中的哥哥所说,无知就是力量(“对外界的无知是一种力量”). 任何模块都不能拥有强大的存在.

网页布局框架_设计框架网页教案_网页框架设计软件

在大型Internet公司中,只要任何人使用核心模块的功能,他们都必须依赖部署在远程服务器上的库,并且存在IP限制,因此只能将代码部署到指定的网段中. 和运行. 结果,基本上不可能在本地执行单元测试或简单调试. 该核心库的存在过于强大,成为发展的瓶颈,严重降低了生产力和代码农民的幸福感.

在“ Fengyuzhe客户服务+”的体系结构中,每个代码农夫都可以轻松地在本地启动该服务,并在一分钟内启动并运行,并进行一些更改以立即查看结果. 这里有一些事情值得我们弥补:

1. Git代码管理

在团队运营中,每个程序员都可以删除完整的最新代码库,也可以将时间花在本地分支机构上,而不必担心会影响其他人的工作. 您还可以先存储本地修改,查看其他人的代码,然后从取消存储中恢复它们. 为了提高团队效率,代码仓库管理建议尽快迁移到Git.

2. Maven,Gradle,Cocopods等的依赖管理.

Maven是用于管理依赖项(Dependency)的工具. 它应该在Java社区中更受欢迎. 我无法想象仍有团队直接复制jar包来管理依赖项. 尽管在早期没有Maven的情况下,复制了jar包,但是遇到的问题也很明显. 依赖的jar包作者更改了一个错误,未能及时将其传输给调用方. 多个调用者使用不一致的jar包,从而导致各种奇怪的错误. 相应地,在Android社区中,gradle的使用频率更高,而CocoaPods则主要用于iOS Objective-C开发.

他应该专注于编织,不去做任何事情. 做好一件事. -史蒂夫·乔布斯

“做好一件事情”实际上并不是老乔的专利. UNIX哲学和Google哲学都促进了这一点. 这句话并不完全正确. 例如,如果一位商人只能将一件事情做好,那么他就无法在市场上生存,但这是一种在工程师中广受推崇的哲学.

我们可以期望一个人具有一百种技能,但是仅期望一种工具可以解决需求并彻底解决需求,尤其是对于一个班级和一种实现工具的方法. 但是,根据实际经验,我们经常看到一类包含超过5,000行代码的类. 它看起来像一把巨大的瑞士. 它可以做任何事情,但是不能做任何事情. 这是“职责分离”表现不佳的一个例子.

网页框架设计软件_设计框架网页教案_网页布局框架

我们还在Windspeaker“客户服务+”提供的SDK和API中倡导相同的想法,并努力将App使用“客户服务+” SDK的门槛降至最低,每个API都能代表自己,并且该API直接没有时间依赖性. 每个内部模块的开发也遵循相同的职责分离原则. 没有良好的框架或工具来支持责任分离原则的实施. 您只能通过经验丰富的人员进行代码审查,找出存在的问题,提出重组计划,并敦促新手进行改进.

个人普遍采用的重建思路仅供参考,被复制后,它们不应对老板的批评甚至与工作相关的伤害负责:

根据不同的主题,将一个大型工具类别划分为几个无干扰的高凝聚力工具类别;例如,通用的NetworkUtils可以分为HttpUtils,FTPUtils,TelnetUtils等. 对于经常呼叫的班级,请仔细观察呼叫情况. 如果某些方法的调用频率低于其他方法,则需要考虑是否应将此方法放在此类中;在A类和B类之间存在相互依存关系,或者说更多类的相互依存关系,那么就需要通过合理安排类的功能来去除茧. 尝试在一个句子中阐明一个类的功能,不要使用“和”,“和”,“或”等连接词;如果出现这些连接词,则需要引起注意;

“要生存的不是最强大或最聪明的人,而是能够最好地应对变化的人. ” ―利昂·梅金森(Leon C. Megginson)

有时候,一个朋友圈子疯狂地散布了一篇文章-“建筑腐败的奥秘”. 每个人都表示同情,并对建筑的未来表示担忧. 但是,可以说有些过时了,有90%的担忧是不合理的,因为在当前产品替换的速度下,有90%的项目都在市场上,这意味着死亡,而无需等待结构的衰败,以及产品已经进入地面了.

在剩余的10%中,也许9%将继续存在,但不会繁荣发展,也就是说,只要不存在诸如内存泄漏之类的问题,代码将始终位于数台小型服务器上即可运行即使没有人以后再维护它. 随着时间的流逝,只有1%的产品会更新和迭代,最终会发展成为Big Mac或Big Mac生态系统下的链接. 这句话似乎很悲观,但这是对现实的最好折衷.

先生. 泰戈尔的一句名言: “这不是槌槌的打击,而是水的唱歌和跳舞,因此鹅卵石是完美的. ”它不是闭门造车的结构,而是不断变化的需求使结构完美.

如果您在早期阶段就在体系结构的完善中苦苦挣扎,并且延迟了产品的交付,那将是毫无价值的. 只有生存,您才有机会. 根据市场变化,对体系结构进行了持续优化,以延长软件生命周期. 因此,如果它达到了大运会的水平,那么它实际上就变成了1%,我们该怎么做才能迎接变革?

首先,请参考本文的第1点和第2点. 如果这两个基本技能没有得到很好的实践,那么就有理由谈论该体系结构的演变以及尚未清除18个罗汉斯并想练习九印真言的新手.

设计框架网页教案_网页框架设计软件_网页布局框架

在设计之初,首先考虑系统的可伸缩性(scalability)

以下将对第四点进行详细说明.

内部模块尽可能可插拔

一方面,是接口和实现的分离,可以随着需求的变化而被替换;另一方面,尝试将功能作为微服务进行服务,并可以在服务老化时监视服务的相互调用,可以逐渐放弃或用新服务替换. 在这一点上,阿里巴巴的Dubbo框架是一个不错的选择.

尝试使用出色的镜架并站在巨人的肩膀上

例如,在Web级别,我们使用Twitter的Bootstrap前端框架来实现响应式Web编程,从而提高了生产效率并减少了解决各种设备适配问题的投资. 当然,这需要设计人员合作,根据Bootstrap规范设计页面,并减少一些个性化的设计.

最后,考虑系统的弹性(弹性,也称为公差)

俗话说,它成为了一种不可杀死的小强,并试图预先预测代码中可能遇到的各种情况. 我经常在代码中看到很多if(){}判断语句. 我问作者: “您还考虑过其他{}吗?”普遍的回答是: “只有在没有其他条件的情况下,这绝对是绝对的”网页框架设计软件,但是,如果我真的遇到其他情况,该怎么办?这就是千年虫问题的产生方式. 也许许多新生不知道千年虫的问题是什么. 简而言之,当年的代码农户仅使用两位数字来表示年,以节省一些存储空间,例如int year = 98;表示1998年. 我想Manon当时的心态是一样的: “仅凭我的代码,我就能活到2000年,这很有趣吗?”

程序员通常可以更灵活地思考,并思考其他尚未处理但可以轻松应对的情况. 例如,如果服务器挂起,则应用程序是否还应跟踪崩溃网页框架设计软件,或者发出友好的提示,或者更友好地使用本地缓存?

网页布局框架_设计框架网页教案_网页框架设计软件

拥有无限的可伸缩性而不需要它,而不是需要无限的可伸缩性而不是它@@ littleidea网民

无限的扩展能力是一种奢侈,但是至少扩展能力不能为零. 想象一下,您为开发老板而努力工作. 一个月后,该网站超载. 老板说: “小A,以前的两台服务器花了我50,000元,流量很快就会翻一番. 再给您5万元,帮助我结转它. ”结果,您发现线性增加服务器无法解决该问题. 原始程序未分层(Web,业务逻辑,数据访问等),从而导致了其他服务器. 您只能将所有层的所有代码移至新服务器. 尽管仅业务逻辑的计算面临压力,但您必须浪费大量服务器. 更糟糕的是,由于程序中使用了文件系统和操作系统命令,因此进行负载平衡并不容易.

以下是一些参考指南:

代码分层是必需的. 当水平较高时,当负载水平较高时,找到一种方法来优化或扩展水平;保持核心服务为无状态,即所谓的无状态与请求无关. 尽可能选择成熟且被广泛采用的成熟基础架构;充分利用Zookeeper等群集管理工具来管理服务;

在Fengyu“客户服务+”中,与业务相关的代码在内部组装到Fengyu ServiceBox中,并且使用阿里巴巴的Dubbo服务执行注册管理. 当负载增加时,可以在操作和维护级别快速添加服务节点以提供更高的服务能力,从而确保高质量的客户体验.

关于作者:

黄耀华

他拥有11年的计算机软件开发经验和Internet产品开发经验,曾在IBM,百度和人人网等行业的顶尖公司工作,尤其是在企业级软件,数据处理,搜索引擎,移动应用开发等. 对该领域的原理和实施有全面而深入的理解. (编辑/魏玮)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-249116-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...