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,必须设置成gameView

            AddModule<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_EDITOR
            if (view == null)
            {
                Debug.LogError(typeof(T1) + "(ModuleView)不存在,可能设错位置了,");
            }
        #endif
            var 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-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值