11. 光速实现 EditorCounterApp 和 给主程看的开发模式

首先,我们来实现一个好玩的事情,就是在前边已经实现好的 CounterApp 的基础上,光速实现一个编辑器版本的 CounterApp。

代码非常简单,如下:

#if UNITY_EDITORusing System;
using UnityEditor;
using UnityEngine;

namespace QFramework.Example
{
    public class EditorCounterAppWindow : EditorWindow,IController
    {

        [MenuItem("QFramework/Example/EditorCounterAppWindow")]
        static void Open()
        {
            GetWindow<EditorCounterAppWindow>().Show();
        }

        private ICounterAppModel mCounterAppModel;

        private void OnEnable()
        {
            mCounterAppModel = this.GetModel<ICounterAppModel>();
        }

        private void OnDisable()
        {
            mCounterAppModel = null;
        }

        private void OnGUI()
        {
            if (GUILayout.Button("+"))
            {
                this.SendCommand<IncreaseCountCommand>();
            }

            GUILayout.Label(mCounterAppModel.Count.Value.ToString());


            if (GUILayout.Button("-"))
            {
                this.SendCommand<DecreaseCountCommand>();
            }
        }

        public IArchitecture GetArchitecture()
        {
            return CounterApp.Interface;
        }
    }
}

#endif

代码量不多,运行结果如下:

这样就非常快速地实现了 CounterApp 的 编辑器版本。

因为 QFramework 写的 App ,底层三层是可以复用的。

如图所示:

底层的三层 与 表现层 的通信方式有 Command、回调/事件、方法/Query。

我们可以把表现层类比成网页前端,而底层三层类比成服务器。

那么 Command、回调/事件、方法/Query 其实就是类似于 HTTP 或者 TCP 的接口或协议。

而接口或者协议只要做好约定,那么前端就不需要关心服务端的具体实现了,而服务端也不需要关心前端的具体实现。

这就做到了在分工时,将表现层和底层三层的工作分别给不同的人来负责。

而笔者曾经做过一个这样的项目。

在项目中笔者负责将 底层三层实现好,然后和服务器把数据和接口调好,数据的显示部分笔者用的一个快速写界面的方案,比如 xmllayout 或者 delight,这种方案写界面非常快,可以用来实现系统原型。

然后等数据和接口调好,系统原型实现好后,把界面、做场景流程、做表现的工作都分配给了初学者的同事们,同事们只要看实现的系统原型,就知道调用哪些 Command/Query、监听哪些事件、或调用哪些方法,这样就可以做好分工协作了。

用一张图表示如下:

当然这只是其中一种的项目开发模式。

随着时间,初学者同事们用熟了这套架构之后,渐渐地也能自己写底层三层了,于是笔者就慢慢把底层的工作量也分出去了,自己就没啥事干了。

好了,这就是一次笔者曾经使用的一种开发模式的分享,而具体自己的开发模式,需要根据实际情况来制定,最简单的方式就是先按照原有的习惯的开发模式,然后逐渐掌握这套架构,掌握了之后慢慢改进之前的开发模式。

这篇就介绍到这里。

笔记总结

  1. Delight is an open-source component-oriented framework for Unity

  2. XmlLayout is a framework for Unity UI which allows you to develop professional, fully functional user interfaces and UI elements using XML.

  3. 底 3 层是可以共享的