设计模式
文章平均质量分 65
许野平
非常喜欢软件设计这份工作,有不错的数学基础,喜欢读书、摄影与音乐。
展开
-
SOLID:软件系统设计的五个基本原则
例如,单一职责原则可以指导我们使用策略模式来将不同的算法封装在独立的类中,从而使得它们可以互相替换。:在软件中,如果 S 是 T 的子类型,那么程序中使用 T 类型的对象的地方都可以用 S 类型的对象来替换,而不会改变程序的期望行为。这意味着代码应该依赖于接口或抽象类,而不是具体的实现类,从而提高系统的可维护性和可扩展性。也就是说,新的功能应该通过添加新代码来实现,而不是修改现有的代码。总之,SOLID 原则并不是五种设计模式,而是一套指导面向对象设计和编程的原则,有助于我们更好地选择和实施设计模式。原创 2024-06-27 15:56:46 · 455 阅读 · 1 评论 -
基于事件的架构工作机制和相关产品
同样,事件的接收者(消费者)也不需要知道事件是从哪里来的,它只需要关注自己感兴趣的事件类型,并在这些事件发生时作出响应。区别在于,基于事件的架构只是把这个请求发出,并不急于得到结果,而是等合适的子系统处理完这个请求,发出Reply(Add(123,456)),最初的请求者再通过事件代理或中介处取回自己想要的结。上述理解捕捉到了EDA的一些核心特性,但需要注意的是,在EDA中,事件的发送和处理通常是异步和解耦的,而且通常不会有一个直接的回复机制来连接事件的发送者和接收者。原创 2024-05-28 15:46:59 · 1019 阅读 · 0 评论 -
企业服务总线(Enterprise Service Bus,ESB)简介
它提供了一个灵活的基础设施,用于连接、路由和中介不同服务之间的消息,从而实现服务的解耦、复用和灵活组合。定制开发可以提供更大的灵活性,但需要投入更多的人力和时间资源,并且需要自行负责后续的维护和升级工作。这些系统可能是在不同的时间点由不同的团队使用不同的技术栈开发的。在这个例子中,ESB充当了各个系统之间的“交通枢纽”,简化了系统间的集成和交互复杂性,提高了业务流程的灵活性和可扩展性。企业服务总线(ESB)的实现方式可以是选择专门的产品,也可以是定制开发,具体取决于企业的具体需求和现有技术架构。原创 2024-05-28 15:36:09 · 657 阅读 · 0 评论 -
SOA 与“微服务”的区别
综上所述,SOA和微服务在服务粒度、通信方式、交付要求、应用场景以及服务管理和部署等方面存在显著差异。这些差异使得两者在各自适合的场景中发挥着不同的优势。SOA(面向服务的架构)与微服务之间的区别可以从多个维度进行分析。原创 2024-05-28 15:27:23 · 461 阅读 · 0 评论 -
SOA 并不是一个单纯的 API
这个面向服务的架构虽然包含了多个提供API的服务,但它本身并不等同于一个简单的API,而是一个更复杂的系统架构。:一个大型企业构建了一个面向服务的架构,其中包含多个独立的服务,如用户管理服务、订单处理服务、库存管理服务等。:考虑一个简单的天气预报API,它允许开发者通过HTTP请求获取特定城市的天气信息。因此,这个天气预报API虽然是一个有用的接口,但并不构成一个SOA架构。原创 2024-05-28 15:24:15 · 331 阅读 · 0 评论 -
无状态程序设计的本质
这样,大部分数据是共享的,只有变化的部分是新建的。换句话说,如果把请求和数据库的内容都看作系统的输入,那么系统的输出(即请求的处理结果)应该只与这些输入有关,而不依赖于任何其他外部状态或之前的请求历史。综上所述,虽然纯粹的无状态的函数式程序设计在表面上看起来无法在内存中保存数据,但实际上通过闭包、Monads、持久数据结构等机制,可以在不违反函数式编程原则的前提下模拟和处理状态。在无状态设计中,系统的行为只取决于当前的请求内容和数据库的当前状态,而不依赖于之前的请求历史或会话状态。原创 2024-05-28 15:08:33 · 1616 阅读 · 0 评论 -
Rust 程序设计:三层架构的“全局数据”的“依赖注入”设计方法
其实,这样做并不违反三层架构原则,因为 main 函数并非三层架构中的 api 层,而是承担起了三层架构的组织者的角色 —— 这就是所谓的“依赖注入” 方法。Rust 程序分三层:api、logic、data,其中数据 Server 在 data 中定义,如果在 data 内定义成全局静态变量,api 层可以看不到 Server,但是 data层的代码访问全局变量 Server 必须是 unsafe 的。然而,在程序运行期间,其他模块应该通过接口或抽象层与data层进行交互,以保持代码的封装性和模块化。原创 2024-05-18 10:43:07 · 767 阅读 · 0 评论 -
RAII:让资源管理变得轻松自如
简单来说,它就是把资源的生命周期和对象的生命周期绑定在一起,确保资源能够正确管理和回收。RAII的好处可不少!首先,它让资源管理变得自动化,你无需手动去申请和释放资源,减少了出错的机会。其次,即使程序出现异常或错误,RAII也能确保资源被正确释放,让你的代码更加安全。最后,有了RAII,你可以更专注于实现程序的功能逻辑,而不用被资源管理问题所困扰。通过将资源的获取和释放与对象的生命周期绑定在一起,它简化了资源管理过程并提高了代码的安全性和可靠性。类,它的构造函数会尝试打开一个文件,并在析构函数中关闭文件。原创 2024-05-14 12:36:50 · 362 阅读 · 0 评论 -
Rust中的链式调用:让代码更“流畅”
当然,链式调用并不是所有情况下都是最佳的解决方案,但它确实是一个很有用的工具,可以让我们的代码更加优雅和易读。今天我想和大家聊聊Rust中的一个非常酷的特性:链式调用。如果你不熟悉这个术语,没关系,我会尽量用通俗易懂的语言来解释。简单来说,就是可以让我们把多个方法调用连在一起写,使得代码看起来更加流畅、简洁。虽然这样的代码也能工作,但是看起来有点零散,不够“一气呵成”。这样,每个方法调用后都会返回对象本身,从而可以继续调用其他方法。希望这篇文章能帮助你理解Rust中的链式调用,并在实际编程中灵活运用!原创 2024-05-12 18:58:45 · 298 阅读 · 0 评论 -
Rust中的链式调用方法
在Rust编程语言中,链式调用是一种流行的编程模式,它允许开发者以流畅、连续的方式调用多个方法。这种风格不仅提高了代码的可读性,而且使得复杂的操作可以串联在一起,形成一个清晰、简洁的语句。在Rust中,链式调用主要依赖于实现某些特定的trait,这些trait为类型提供了可以链式调用的方法。原创 2024-05-12 17:00:17 · 559 阅读 · 0 评论 -
MVC:一种设计模式而非软件架构
然而,重要的是要理解MVC是一种设计模式,而不是整个软件的架构。软件架构关注的是系统的全局结构和设计原则,以及如何将系统分解为可管理的部分,并定义这些部分之间的交互方式。软件架构是一个更广泛的概念,它涉及整个软件系统的结构和设计,包括系统的各个组件、组件之间的关系以及系统的整体行为。:作为模型和视图之间的中介,负责接收用户的输入,并调用相应的模型处理数据,然后更新视图。MVC设计模式的核心思想是将数据和数据的展示分离开来,使得数据的处理逻辑和用户界面的变化可以独立演进,互不干扰。原创 2024-05-11 22:49:43 · 379 阅读 · 0 评论