我最喜欢的 5 个软件设计原则
我希望大家对我的内容提出诚实的反馈。请评论或在 Twitter 上联系我!
开发软件很容易。但开发设计精良、性能卓越的软件却很难。非常难。我从 90 年代就开始写代码了,21 世纪初第一次因此而获得报酬。我仍在学习,并将永远学习下去。
虽然很多人会对其中的细微差别争论不休,但软件开发人员和软件工程师之间确实存在很大区别。其发展顺序通常是:
学生/业余爱好者 -> 开发人员 -> 首席开发人员 -> 软件工程师 -> 软件架构师。
如果你想在职业生涯中更上一层楼,就需要学习优秀的软件设计。即使你不急于晋升,也可以开始学习优秀的设计原则。无论你处于职业生涯的哪个阶段,这都能让你成为更优秀的开发者。
想立即开始吗?
未来的你会感谢你迈出了这些步骤。在这个过程中,你会学到很多设计优秀软件的原则。
以下是我最喜欢的5条软件设计原则,它们对我的职业生涯帮助很大。它们不仅帮助我构建了更好的软件,还帮助我理解了这门技术,并减轻了很多挫败感。
1.抽象
抽象就是从流程中移除细节。例如,假设你想让代码计算圆的面积。你创建了一个名为 GetAreaOfCircle() 的函数,并在该函数内部获取值、进行计算并返回面积。
你不需要每次在代码中都把圆周率乘以半径的平方,对吧?你只需要在函数中执行一次,然后调用该函数即可。现在你已经抽象了这个过程。从现在开始,任何使用你的 GetAreaOfCircle() 函数的人都不需要知道它是如何计算的,他们只需使用它即可。
抽象的一个很好的例子是 C# 中的 Console.WriteLine(string)。这个函数(或方法)会将文本写入控制台,但你不知道它是如何执行的,你也不关心它。数据库操作通常被抽象,其他很多操作也是如此。.NET 框架只是为开发人员提供的一组抽象。
为什么要使用抽象? 它能让你软件的可复用性更强,并让你和其他开发者专注于真正重要的细节。你真的关心对象是如何写入数据库的吗?不,你还有更重要的事情要做。
2.关注点分离
关注点分离是一种将程序分解成多个部分,使每个部分都只执行一项任务的原则。这在面向对象编程中尤为重要。
例如,你想让你的数据库类更新用户界面吗?当然不是。你想让你的音频库接收鼠标输入吗?当然不是。这只会让事情变得复杂。
你的每个类都应该包含一组与单一任务相关的方法。(例如:一个管理用户的用户类)该类中的每个方法都应该只做一件事,并且做好它。例如,在你的用户类中,有一个方法用于添加用户,另一个方法用于删除用户,等等。
只做一件事,并且做好它。
为什么要使用 SoC? 通过逻辑上的分离,可以使它们更加可靠、可移植且灵活。这样可以减少类之间的依赖,避免调试变成一场噩梦。紧耦合会让你的工作更加困难。
3. 亚格尼
你不会需要它!!程序员就是喜欢“把东西存根”然后为了“未来扩展”而编写代码。我自己就这么做过。你添加一些你认为以后会用到的东西,然后让它们静待时机。这可能是一个禁用的按钮,也可能是整个类。大多数情况下,你最终会得到一堆永远不会用到的代码。抵制这种诱惑。
为什么要使用 YAGNI? 为将来使用而构建的类和方法比硬盘上的额外空间更有害。据我所知,这是积累技术债务的最佳方式之一。构建它需要成本(你的时间),更长的延迟(当你在构建它时,你本应该专注于其他事情),最重要的是,还有成本,也就是在测试和调试中增加的所有复杂性,却没有任何回报。
4. 亲吻
保持简单,别傻了!秉承这一原则,无需赘言。 为什么是KISS?复杂是敌人。你设计的东西越花哨复杂,调试和扩展就越困难。当然,你可以炫耀自己,打造一个拥有1000个功能的遥控器,但用户只想打开电视。简单远比复杂更令人印象深刻。
5. 干燥
不要重复自己。这与抽象密切相关。不要在任何地方重复代码。如果必须执行两次相同的操作,并且使用相同的代码,请将其放入函数(方法)中。有些工程师会争论在抽象为方法之前应该重复多少次,我说的是两次。如果必须执行两次相同的操作,请将其放入函数中。
为什么要遵循 DRY 原则? 因为当需要修改代码时(这种情况肯定会发生),每次重复操作后都必须修改。如果重复操作后只修改了一个地方,可能会得到意想不到的结果。
此外,当有人审阅或使用你的代码时,这样做还能节省空间。简洁总是好的。
结论
这些是我多年来一直秉持的几条最重要的原则。当我设计和编写代码时,它们会像提醒我即将去做不该做的事情一样浮现在我的脑海里。这些基本原则无论你的技能水平如何,都能帮助你。一段时间后,它们就会成为你的第二天性。
读完这些,你就可以开始真正提升你的设计技能了。
祝您编码愉快!
如果您对本文有任何反馈,请在评论中告诉我或在 Twitter 上联系我
文章来源:https://dev.to/pluralsight/my-5-favorite-software-design-principles-4ech