Skip to content

0604第一人称 主语函数、第三人称 宾语函数、工厂函数、工厂函数 创建出的结构体的方法、以及最近的关于什么时候用第一人称模式,什么时候用第三人称模式的思考

ziyouzy edited this page Jun 6, 2020 · 1 revision

以如下函数举例:

switch mes.Type {
	case message.LocalUserLoginMesType :
	   //处理登录登录
	   //创建一个UserProcess实例
		lup := &process.LocalUserProcess{
			Conn : this.Conn,
		}
		err = lup.ServerProcessLogin(mes)
	case message.LocalUserRegisterMesType :
	   //处理注册
	   lup := &process.LocalUserProcess{
			Conn : this.Conn,
		}
		err = lup.ServerProcessRegister(mes) // type : data
	case message.RemoteUserLoginMesType :
		//处理登录登录
		//创建一个UserProcess实例
		 rup := &process.RemoteUserProcess{
			 Conn : this.Conn,
		 }
		 err = rup.ServerProcessLogin(mes)
	 case message.RemoteUserRegisterMesType :
		//处理注册
		rup := &process.RemoteUserProcess{
			 Conn : this.Conn,
		 }
		 err = rup.ServerProcessRegister(mes) // type : data
		 
	case message.NodeRegisterMesType:
		np :=&process.NodeProcess{
			Conn : this.Conn,
		}
		err = np.ServerProcessRegister(mes) // type : data
}

每个case分支都需要创建一个process结构体,而这个结构体应该用第一人称模式创建,还是用第三人称创建,这里开始引出今天的思考:

首先说明,第一人称与第三人称不是游戏中的那个概念,而是英语语法的“主谓宾”中的主和宾:

百度上对主谓宾的说明:

例如:I hit him.‘我打他.’中,由于‘我’是主语,‘打’是谓语,‘他’是宾语.位置已经决定了它们到底是什么‘语’,
还有就是我们说,主语是动作的发出者,如:I love you 我主语发出了动作,love,love的对象,就是动作施为的对象是you 也就是宾语了

于是这里需要探讨一个完整的程序,几个“主要角色”所扮演的“不同角色”分别是什么,这几个角色分别是:

程序本身
主函数
utils文件夹内工具
程序使用者(访问用户)
程序编写者
温湿度传感器等自动化设备

先尝试用一种模式:

程序本身-主
主函数-不属于任何角色,只是各个角色“实现各自功能”的场地
utils-宾
程序使用者-信号源&触发器
程序编写者-不属于任何角色,只是设计者和旁观者
温湿度传感器等自动化设备-信号源&触发器

于是发现这里多了一个角色,也就是信号源&触发器,而这似乎任何程序都会存在,比如单机游戏(无论fc还是侠盗猎车)都会存在用户的鼠标点击(开始游戏,),网络游戏都会有用户登陆,点击怪物打怪,风暴英雄也会存在用户控制的打野;购物网站也是一样,用户会登陆,买东西,支付。

这里或许可以这么总结,程序是用来处理某一类型触发事件(信号源的)软件。

温湿度传感器会每个3秒产生一次触发,使用者会在他需要的时候产生一系列触发,所以从这个角度来说,我考虑把触发的发起者统称为“节点”

触发是动词,也可以这么说:“信号(消息)”的发起者称为节点

我想到了更好的方式:可以照搬qt信号与槽的理念:用户和温湿度传感器都是signal,程序是一个巨大的slot,会首先区分发过来的是那种sig再去用不同的方式处理

这样一来,思路就更加清晰了,signal是不属于“主谓宾”任何一方的,或者说,“主谓宾”构成了slot,slot就是程序本身,slot内才需要去考虑第一人称&第三人称模式

现在外层疑问已经梳理清晰,开始正式思考内层,也就是程序本身(主语)和utils(宾语)以及不属于utils,存在于utils之外的结构体

有个很好区分的方式,utils文件夹内存放的都是一些可以供其他程序调用的“工具”如crc校验工具(结构体)、socket包的处理工具(结构体)(数理方式包括如何读,如何写)

不属于utils文件夹内的结构体都是只应属于当前程序自身的结构体,如procssor

socket包的处理函数其实是进行最原始sig内数据的反序列化操作,或者说格式化为程序可读的msg结构体:

type Message struct {
Type string `json:"type"`  //消息类型
Data string `json:"data"`
}

这个msg结构体起始也是和utils一样,可是供多个程序使用的,但是msg结构体是独立存在的,而不像utils一样,包含多个不同的小工具,或者说,我也可以把utils内socket文件夹和message文件夹一样独立出来。

于是这里思路就更加清晰了,第一人称(主)依然是程序自身,第三人称(宾)其实就是工具,只不过工具可以是各种各样的,同时也可以是小型工具(存在于utils文件夹内,用一个.go文件就可以写清除的),也可以是大型工具,如socket文件夹,message文件夹。

由此引出,主语的位于是属于程序直接调用的独立的函数,而这些函数可能会是工厂函数,主函数的初始化函数也是个典型的谓语

思路先总结到这里,感觉还不错,接下来可以开始设计拓扑图了,设计拓扑图的过程中继续总结,更新这些思路

Clone this wiki locally