需求如何: 用户名字长度为2-12之间, 如果错误在界面上弹出一个消息框
写烂一点
public void PostRename(string name) { if (string.IsNullOrEmpty(name)) return; if (name.Length > 2 && name.Length <= 16) { UI类.打开Box框("你用户输入错误") return; } }
写正常一点
public void PostRename(string name, string guid) { if (string.IsNullOrEmpty(name)) return; if (name.Length > 2 && name.Length <= 16) { EventManager.Noifty("消息","你用户输入错误") return; } } //界面这边的方法 public void OnRenameResult(string msg) { if (string.IsNullOrEmpty(msg)) return; else Show(msg); //显示错误提示 }
以上这种方式会因为底层的结果增多,导致上层增加 if 或 switch对结果判断 多余的监听函数, 我们只想打印消息, 为了不破坏层的概念, 我们要写很多代码.
可以添加一个接口消除这些问题,我们只关心的输出信息, 至于上层如何输出 这个是他们的事情.
写好一点
输出接口:
public interface IDebugPop { void Box(string msg); } public sealed class IPopUpBoxMa { private static IDebugPop mI; public static IDebugPop I { get { if (mI == null) mI = new PopUpBox(); return mI; } } private static void SetIPopUpBox(IDebugPop i) { mI = i; } } public class PopUpBox : IDebugPop { public void Box(string msg) { Debug.Log(msg); // 输出UnityLog ShowMsg(msg); //显示一个Box框来输出 } }
逻辑层:
public void PostRename(string name) { if (string.IsNullOrEmpty(name)) return; if (name.Length > 2 && name.Length <= 16) { IPopUpBoxMa.I.Box(“你用户输入错误”) return; } }