Unity-Yaml-Dot-Net诗歌篇-如何像雷总学习写代码像诗歌-MVC 框架,+注入Inject +状态机生命周期

我们是否可以像雷总一样

大家都说他的代码,像诗一样优雅

一个MVC 框架,加注入

(以下内容其实和雷总没什么关系,也和雷总当年代码毫无关系,不过先“阅读理解”一下)

雷总-写的代码像似一个优雅??!!^^ 

RI.asm 是一个当时放在5寸盘的文件名+后缀

估计内存太少,所以这个代码的功能:“一键清理内存”,和今天大家看不起的360差不多

(已经去到2.0版本了,这我多次提到:能到3.0版本的代码,如果不是垃圾代码,就是比较神的代码)

SPDOCDOC,(dos)你懂的,但人家已经是v6.0
WPSv3,!!!!!版本3,,,雷总和求伯君,牛逼
Game Busters Ⅲ,Ⅳv3,v4??? 一个2D像素格子游戏(1990当时的引擎)
NETXNovell公司 可以看下图,是对上的, 一个早期的【RPC】??早期和微软合作,微软做大了,后来2014年这公司就没了
PC-CACHE

How to Clear Your PC's Cache in Windows 10

Norton Chche后来很出名的Norton软件
Microsoft SmartDrv缓存换IO读取速度,可以说内存是少,但IO更弱,还是物理硬盘的时代,转速很慢
SideKick 1.56ASideKick 和 Buster都是相当地道的,美国俚语,不知道当年的雷总理解是否OK??
MOUSE DriverLOL等游戏将鼠标带到了一个不属于它的高度,当年的鼠标驱动也是可选的,随着AI和电车的发展,估计不久的之后也会变成可选
Crazycga?? mono ?? chrome ?? 这么神,这是1990??
RAMBIOS v2.0

(日本人 at 1985,  40年前??!!^^)-----------

由 H Kihara 著作 · 1985 — [RAMBIOS--a new review index]. Tanpakushitsu Kakusan Koso. 1985 Dec;30(13):1421-3. [Article in Japanese]. Author. H Kihara. PMID: 4089205

?86MAX 6.01<没查到这个是什么么>

可能关联也可能无关的参考图一个:

真正Unity的一个Mvc框架

基础的MVC层

    public sealed class EnemyModule : Module<EnemyModuleView>{//        private readonly List<EnemyController> _enemies;public EnemyModule(EnemyModuleView view) : base(view){//  _enemies = new List<EnemyController>();//不算太严谨的MVC,但本身结构就必须往MVC靠,}//。。。。}//个人发现 abstract和interface 其实理论作用,大于实际作用,大部分用virtual解决即可;
//因为大部分程序,都是建基于一个虚拟机,而虚拟机或运行时--相当于一个大的abstract层了,
//所以粒度去到 virtual 即可
//这个代码非常严谨的“理论正确”,但又不是很往APP层MVC上面 严格去靠 
//这代码其实有些“高不成,低不就”,,能用,但不实用的
namespace Game.Level
{public abstract class Module : IDisposable{public abstract void Initialize();public abstract void Dispose();}public abstract class Module<T> : Module{protected readonly T _view;protected Module(T view){_view = view;}}
}

用法也很简单

我比较佩服的是:它直接用 namespace Game.Level,直接用Game 和 Level 这么通用的关键字做命名空间

还有高手,我是真想看看啊谁用 Hello World!!做类名的

用法也很简单,利用了Unity的一些结构,和API

        public virtual void InitLevelModules(){//AddModule<CashModule, CashModuleView>(_levelView);//_levelView 会清掉AddModule<CashModule, CashModuleView>(_gameView);//在gameView,必须设置成gameViewAddModule<EnemyModule, EnemyModuleView>(_levelView);AddModule<BulletModule, BulletModuleView>(_gameView);AddModule<MarkerModule, MarkerModuleView>(_gameView);//_gameView 在 gamePlay.scene,应该会保留}/// <summary>/// 做了几件事情:///     创建view,挂在场景(*可不同scene)中的; 创建Module;Inject注入;调用初始化Init();/// </summary>/// <typeparam name="T"></typeparam>/// <typeparam name="T1"></typeparam>/// <param name="component"></param>protected void AddModule<T, T1>(Component component) where T : Module{var view = component.GetComponent<T1>();#if UNITY_EDITORif (view == null){Debug.LogError(typeof(T1) + "(ModuleView)不存在,可能设错位置了,");}#endifvar result = (T)Activator.CreateInstance(typeof(T), new object[] { view });_levelModules.Add(result);_injector.Inject(result);result.Initialize();}

AddModule调用,做了两个事情

  • BulletModule 通过 Activator,进入到内存,并不会在Unity Inspector显式显示
  • BulletModuleView 并不会创建一个Component 在一个GameObject 节点,而是这个GameObject传进来时,是要先自带xxxxView的节点(Unity的引擎世界里,其实没那么严谨)

不得不说

Unity拖动到Inspector可以自动识别GameObject,Transform,还是XXXModuleView(Component),3种状态都能自动识别,都能互相引用;新人可能会觉得很鸡肋,很困惑; 但这种多态的实现功能,实在是很超前很超前,很牛逼

这才是,像诗歌一样的艺术品

完全是为了用户实用方便,又结合技术力的Editor; 这才是真正漂诗歌;

诗歌 如果是不实用的,就是那些不实用的MVC框架,或者很多坚持JAVASCRIPT代码团体,

你的代码是按照那些本身不写代码,或者做的游戏自己不玩,或者写的APP只是卖广告,的人提出需求完成,有可能写得像诗歌么;

《写了两天,写不完,之后再补充》Inject注入部分,和State声明手机

参考

C# 使用模式匹配的好处,因为好用所以推荐~ - 万雅虎 - 博客园

SHADER的动态组合_动态shader-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10810.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

安卓好软-----电脑端查看apk全部信息的工具 查看包名 名称以及权限等等

有时候从网络下载的应用很多是英文。时间久了会忘记到底是什么apk应用。这款工具可以方便的查看apk应用的名称 包名以及各种权限 图标 大小版本号等等。方便用户随时查看 APK Helper能够详细地获得安装包名、软件名称、APK证书、真实版本号、要求的手机版本、系统权限、以及证书…

分布式唯一ID生成(四):tinyid

文章目录 本系列前言号段模式多DB支持tinyid-client 本系列 漫谈分布式唯一ID分布式唯一ID生成&#xff08;二&#xff09;&#xff1a;leaf分布式唯一ID生成&#xff08;三&#xff09;&#xff1a;uid-generator分布式唯一ID生成&#xff08;四&#xff09;&#xff1a;tiny…

JavaWeb:文件上传2

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

April tag坐标定义

朝右的方向为x轴正向&#xff0c; 朝下的方向为y轴正方向&#xff0c; z 轴垂直纸面向里。 4个角点的坐标定义如下图所示。

江行智能×图扑软件:输煤皮带数字孪生管控系统

在现代矿业和电力行业中&#xff0c;输煤皮带系统是运输环节的核心。然后&#xff0c;随着智能化生产的高要求&#xff0c;智慧矿山输煤皮带系统的传统管理模式已显得力不从心。产业引入的三维可视化和数字孪生技术&#xff0c;一改传统输煤皮带系统由于设备老化、管理不善等原…

【Python】从入门开始抓取你想要的电影,一周可掌握基础,附完整源码

Python学习很简单&#xff0c;只是你走进了误区。 为什么你一定要先掌握枯燥的基础点后&#xff0c;再去做实际操作呢&#xff1f; 其实&#xff0c;你根本坚持不了那么长时间&#xff0c;但实际上你可以直接去做python项目。 不信&#xff1f;看看我做这个项目的思路&#x…

【C++】map和set的介绍及使用

前言&#xff1a; map和 set 是 C STL&#xff08;标准模板库&#xff09;中的两种非常重要的容器&#xff0c;它们基于一种叫做平衡二叉搜索树&#xff08;通常是红黑树&#xff09;的数据结构来实现。在 C 中&#xff0c;map 是一个键值对容器&#xff0c;set 只存储唯一的键…

NumPy 数组属性

1.NumPy 数组的基本属性 NumPy 数组的维数称为秩&#xff08;rank&#xff09;&#xff0c;秩就是轴的数量&#xff0c;即数组的维度&#xff0c;一维数组的秩为 1&#xff0c;二维数组的秩为 2&#xff0c;以此类推。NumPy中&#xff0c;每个线性的数组称为轴&#xff08;axis…

Spring源码(十二):Spring MVC之Spring Boot

本篇将详细讨论Spring Boot 的启动/加载、处理请求的具体流程。我们先从一个简单的Spring Boot项目日志开始分析&#xff08;这里假设读者已经仔细阅读完了前面的文章&#xff0c;且对Spring源码有一定深度的了解&#xff0c;否则会看得一脸懵逼&#xff09;。 本文为2024重置…

游戏引擎学习第四天

视频参考:https://www.bilibili.com/video/BV1aDmqYnEnc/ BitBlt 是 Windows GDI&#xff08;图形设备接口&#xff09;中的一个函数&#xff0c;用于在设备上下文&#xff08;device context, DC&#xff09;之间复制位图数据。BitBlt 的主要用途是将一个图像区域从一个地方复…

双指针算法的妙用:提高代码效率的秘密(2)

双指针算法的妙用&#xff1a;提高代码效率的秘密&#xff08;2&#xff09; 前言&#xff1a; 小编在前几日讲述了有关双指针算法两道题目的讲解&#xff0c;今天小编继续进行有关双指针算法习题的讲解&#xff0c;老规矩&#xff0c;今天还是两道题目的讲解&#xff0c;希望…

[CKS] K8S NetworkPolicy Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于不安全项目修复的题目。 What’s the NetworkPolicy 关于network policy的介绍可以查看&#xff1a; https://kubernetes.io/docs/concepts/services-networking/network-policies/ Question 1 …

python全栈开发《62.获取两个集合的并集》

目录 1.什么是并集2.union的功能3.union的用法4.代码 1.什么是并集 集合a&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4 集合b&#xff1a;3&#xff0c;4&#xff0c;5&#xff0c;6 a和b一共拥有的不重复的元素有1&#xff0c;2&#xff0c;3&#xff0c;4&#xff…

DICOM图像知识:DICOM图像排序与坐标系解析

目录 引言 1. 概述 2. DICOM图像排序规则 2.1 Patient的Study按Study Date排序 2.2 Study的Series按Series Number排序 2.3 Series的SOP按Instance Number或Slice Location排序 2.3.1 Instance Number排序 2.3.2 Slice Location排序 2.3.3 使用Image Position (Patien…

B-Spline(B样条)插值

B-Spline&#xff08;B样条&#xff09;详细介绍 B-Spline&#xff08;B样条&#xff09;是一种常用于计算机图形学和数据拟合的数学方法。它由一系列控制点和节点&#xff08;Knots&#xff09;以及一组基函数&#xff08;Basis Functions&#xff09;组成。B-Spline 能够通过…

HarmonyOS Next 并发 taskpool 和 worker

HarmonyOS Next 并发 taskpool 和 worker 总览 介绍 并发&#xff0c;指的是同一时间内&#xff0c;多段代码同时执行。在ArkTs编程中&#xff0c;并发分为异步并发和多线程并发。 异步并发 异步并发并不是真正的并发&#xff0c;比如在单核设备中&#xff0c;同时执行多端…

4.3软件设计:面对对象的设计

面对对象设计 1、面对对象的架构设计1.1 第一步&#xff1a;构造系统的物理模型1.2 第二步&#xff1a;设计子系统划分各个子系统的方式定义子系统之间的关系定义子系统的接口 1.3 第三步&#xff1a;非功能需求设计 2、面对对象的用例设计与类设计2.1 类2.2 类间关系2.3 细化用…

华为OD机试 - 求小球落地5次后所经历的路程和第5次反弹的高度 (Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 实战项目访问&#xff1a;http://javapub.net.cn/ 专栏导读 本专栏收录于 《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》 。 刷的越多&#xff0c;抽中的概率越大&…

VBA08-if语句

一、单行 If 语句 If x > 10 Then MsgBox "x is greater than 10"二、多行 If...Then...End If 语句 If x > 10 ThenMsgBox "x is greater than 10"y x 5 End If 三、If...Then...Else 语句 If condition Then 当条件为真时执行的代码块stateme…

JS 函数的基本知识

目录 1. 介绍函数 2. 使用函数 3. 函数传参 3.1 传递默认值 3.2 传递数组 3.3 传递变量 4. 函数返回值 5. 匿名函数 6. 立即执行函数 7. 注意 1. 介绍函数 在学习 CSS 样式过程中&#xff0c;经常有如下操作&#xff1a; 2. 使用函数 函数声明&#xff1a; 函数命名规…