当前位置:首页 > 其他 > 正文内容

架构演化学习考虑(3)

邻居的猫1个月前 (12-09)其他484

架构演化学习考虑(3)

接上一篇咱们持续对指令形式进行学习。

在这节内容中,咱们聊一下经典的指令形式,还记得上一篇文章最初咱们完结的简略的指令形式吗?来看代码,非常简略易解。

public interface ICommand
{
    void Execute();
}

public class PlayMusicCommand : ICommand
{
     public void Execute()
     {
        Debug.Log("你说家是仅有的城堡,跟着稻香一路奔驰~");
     }
}

var Start()
{
    var command = new PlayMusicCommand();
    command.Execute();
}

以上最简的指令形式中,咱们能够别离出一些人物。

ICommand:接口 对应经典指令形式中的 Command的人物

PlayMusicCommand:类 承继接口,是接口的详细完结,对应经典指令形式中的ConcreteCommand人物。

Start办法:是指令的宣布者,对应经典指令形式中的Invoker人物

由此咱们提炼完结经典指令形式的三个人物。

经典指令形式的完结完善

还差一个Receiver,即指令的接收者或履行者,组成经典指令形式的四种(也有说五种)人物:

  • Command:笼统指令(指令接口)
  • ConcreteCommand:详细指令
  • Invoker:指令的调用者,发起者,触发者。
  • Receiver:指令的接收者,被Command拜访和操作。
  • 客户端:创立详细指令目标并设置其接收者,将指令目标交给调用者履行(假如涉及到5部分的话)

咱们还以产品购买为例,用以上涉及到的人物方法来完结购买货品这样一个操作。

namespace TestCommand
{
    //售货员 对应Receiver
    public class Salesperson
    {
        public void SellGoods(int id,int count)
        {
            for (int i = 1; i <= count; i++)
            {
                Debug.Log($"编号为{id}的产品售出1件!");
            }
            Debug.Log($"编号为{id}的产品总售出{count}件!");
        }
    }

    //指令接口  对应Command
    public interface Command
    {
        void Execute();
    }
    
    //详细完结 对应ConcreteCommand 详细指令
    public class BuyCommand : Command
    {
        public Salesperson salesPerson;
        public int goodsId;
        public int count;
        public void Execute()
        { 
            salesPerson.SellGoods(goodsId,count);
        }
    }
    
    //触发者 指令的发送者  
    //顾客
    public class Customer
    {
        private List<Command> mCommands = new List<Command>();

        public void AddCommand(Command command)
        {
            mCommands.Add(command);
        }
        
        //触发指令
        public void triggerCommands()
        {
            mCommands.ForEach(command=>command.Execute());
            
            mCommands.Clear();
        }
    }

    //客户端人物 
    void Start()
    {
        var customer = new Customer();
        var salesperson = new Salesperson();
        
        //2 号产品购买五件 的指令
        customer.AddCommand(new BuyCommand()
        {
            salesPerson = salesperson,
            goodsId = 2,
            count = 5
        });
        
        //让顾客宣布购买指令
        customer.triggerCommands();
    }

}

其大体思路如下:对应着经典指令形式的五部分

image

总算将经典形式的五部分完结完整了,指令形式梳理到这儿差不多完毕了,那么这对架构规划有啥启示和运用考虑呢?

当然有。

在项目中,咱们对坐落底层部分的数据模块拜访时就能够运用指令形式,Recever为底层的System或许数据Model,ConCreteCommand为对应的详细操作(对数据进行查和改、解锁成果体系的成果),而触发器Involver则是架构,也便是说整个项目的依靠联系的总掌控者,而客户端则对应体现层的操控逻辑。

不知道有没有对”架构“这个触发者的认知有没有愈加详细一些呢?

笔者是这样了解”架构“的身份的,好比是一个交换机接线员,当咱们需求和朋友电话时分,则要拿起自己这边的话筒传呼接线员,告知TA自己朋友的电话机号,然后接通之后,完结咱们对朋友沟通的需求。当然这个比如不一定非常精确,但很大程度上让咱们对”架构“的知道没有那么笼统。

好,在回到经典形式,来看一看此形式有什么优点。

指令形式的优点

优点之一是将Invoker和Receiver彻底解耦。

那这个功用如同观察者形式也能够完结吧,那么和观察者形式比照有些不同呢?答案还在指令自身,指令除了将invoker和receiver解耦,还能够进行自在扩展。我能够购买、也能够退货,也能够替换产品等等一些操作。当然从Invoker这边能够对指令进行存储(运用堆或许栈或许List等容器),从而能够完结回退恢复、行为树等功用。

关于指令形式的另一点考虑:

咱们将视角聚集在指令形式的Command中,也便是结构图上的”订单模板“。有了模板就好进行拓宽,这儿简略聊聊,指令形式中的开闭准则。

指令形式中的开闭准则

开闭准则咱们比较了解:

开闭准则:一个类应当对扩展敞开、对修正封闭

当一个结构模块或体系开发成型之后,除非遇到一些bug或许功用缺点,不然不应该对结构模块或许体系进行修正,这便是对修正封闭。而需求新增加功用或许拓宽时分,能够经过扩展的方法来增加一些功用,也便是对扩展敞开。

而依据指令形式中的各个人物,在拓宽功用时分有着不同的准则和效果:

  • Invoker:封闭修正
  • Recever:封闭内部修正
  • Command: 拓宽的规范
  • ConcreteCommand :敞开完结的拓宽

笔者的项目功底尚浅,仅仅简略的聊一下涉及到开闭准则,愿咱们多写代码多实践,

渐渐将这些考虑在实践项目中有所运用和体会,逐步提高自己的编程和架构规划能力。

好,关于指令形式咱们就聊到这儿了,接下来还会持续更新此系列内容,谢谢各位与我一同考虑和体悟!

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=701

分享给朋友:

“架构演化学习考虑(3)” 的相关文章

Blender快速入门教程1简介

Blender快速入门教程1简介

0 简介 Blender是最著名的 3D 计算机图形制造免费程序之一。有了 Blender,你能够创立人物、道具、环境以及你的幻想力所能产生的简直全部其他东西。它不只能够创立方针。你还能够让它们运动起来。在动画中叙述一个故事,带领人们穿越你自己发明的国际,或许为一些视频片段增加特效。全部皆有或许。...

API门户:API经济持续发展的增加引擎

API门户:API经济持续发展的增加引擎

在现在这个数字化敏捷发展的年代,API门户正扮演着不可或缺的人物,成为推进API经济继续增长的重要引擎。跟着API数量的急剧添加,企业能够愈加便利地完成内部和外部体系之间的调用。以往企业需求从零开始开发每一个API,现在,API 门户为企业供给了一个集中化敞开同享渠道,企业安排或许个人开发者能够在这...

读数据维护:作业负载的可恢复性03构建自己的结构

读数据维护:作业负载的可恢复性03构建自己的结构

1. 构建自己的结构 1.1. 数据维护作业会影响本安排的各个方面 1.1.1. 听取各种人员的定见并征得他们的赞同,其间有技能人员,也有非技能人员 1.1.2. 树立各种评定委员会(review board) 1.2. 文档模板 1.2.1. 方针论述 1.2.1.1. 尽或许简练...

云计算学习要多久,云计算学习需要多长时间?

云计算学习要多久,云计算学习需要多长时间?

1. 基础知识学习: 如果你是计算机科学或相关领域的初学者,可能需要几个月的时间来学习云计算的基本概念、术语和架构。 如果你有编程或系统管理的背景,可能只需要几周的时间来掌握基础知识。2. 专业课程或认证: 完成一门专业的云计算课程或获得认证(如AWS Certified Solu...

开源软件的意义,推动创新与共享的未来

开源软件的意义,推动创新与共享的未来

开源软件(Open Source Software,简称OSS)指的是源代码可以被公众自由使用、修改和分发的软件。这种软件的开发和维护通常由一个社区或多个开发者共同完成,而不是由单个公司或个人控制。开源软件的意义主要体现在以下几个方面:1. 促进创新:开源软件允许用户和开发者自由地修改和改进代码,这...

云计算好学吗,云计算好学吗?入门与进阶指南

云计算好学吗,云计算好学吗?入门与进阶指南

云计算是一个涉及广泛技术和概念领域的学科,包括但不限于网络、存储、服务器、软件、安全、自动化和优化等。对于初学者来说,学习云计算可能会觉得有一定的难度,因为它需要理解许多抽象的概念和技术细节。随着实践经验的积累和不断的学习,学习云计算的过程会变得更加容易。1. 基础知识:首先,确保你具备计算机科学的...