zoukankan      html  css  js  c++  java
  • 多层架构的调用方式(方法回调)

    多层架构,一般我们指三层架构,如WEB层,SERVICE层和DATA,其实我是最简单的一种说法,真正的项目开发中,远远不只有这三层,其实在WEB与SERVICE层中还有一个WEB.SERVICE层,主要用来作WEB与SERVICE的服务,它与直接与前台VIEW通讯,也不直接与底层数据通讯,一般来说,都是用来做文件管理,上传,下载,COOKIES的持久化等,一句话,就是与服务器本身相关的东西我们都可以放在本层中.OK,现在言归正传了,今天要说的是什么?多层架构的调用方式,我们来看一下,一般来说,我们要遵守一个原则,高层向底层的调用,底层不要直接调用高层,除非有一些特殊的要求,有这种要求我们也不要直接调用,那么怎么调用呢,我们可以使用回调函数:P,喜喜,看看代码吧!

    一个最简单的代码:

    #region 回调函数的学习
            /*也就是相当把某个方法(WorkDoneHandler())当作参数传递给另外一个方法(Working(WorkDone callBack)).
              这样做的好处在于,可以动态的指定执行哪个方法.
              比如在Do()方法中,我们指定的callback 是WorkDoneHandler 当然也可以是其它匹配的方法. 而Working()方法 更本不需要知道自己最后执行           的是哪个Handler.*/
     
     
            void Working(Delegate callBack)
            {
                WorkDone _callBack = callBack as WorkDone;
                _callBack();
            }
     
            delegate void WorkDone();
            void WorkDoneHandler()
            {
                Console.WriteLine("WorkDoneHandler");
            }
            void WorkDoneHandler2()
            {
                Console.WriteLine("WorkDoneHandler2");
            }
     
            void Do()
            {
                WorkDone callBack = new WorkDone(WorkDoneHandler2);
                Working(callBack);
            }
            #endregion

    这段代码是我从网上找的,这们高人写的真不错,一针见血,没有费话.

    再来看一下,我写的一个DEMO吧

    #region 标准分层架构的测试
            /// <summary>
            /// 模拟DATA层用户登陆功能
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public bool DataLogin(Entity.User user)
            {
                bool flag = false;
                if (user.UserName == "zzl")
                    flag = true;
                return flag;
            }
            /// <summary>
            /// Service层,与Data数据层进行交互,对用户登陆进行验证,并返回消息
            /// </summary>
            /// <param name="user"></param>
            /// <param name="a"></param>
            /// <returns></returns>
            public string ServiceLogin(Entity.User user, Delegate a)
            {
                LoginEventHandler a1 = a as LoginEventHandler; //强转化类型
                if (DataLogin(user))
                    return a1("登陆成功");
                else
                    return a1("用户密码有问题"); //在这个方法中以回调的方法赋值
            }
     
            delegate string LoginEventHandler(string msg);
     
            /// <summary>
            /// 提示比它低一层的方法的回调(从底到高的调用)
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
            public string ReBack(string msg)
            {
                return string.Format("登陆结果:{0}", msg);
            }
            /// <summary>
            /// WEB.Service层登陆
            /// </summary>
            public string Login(Entity.User user)
            {
                LoginEventHandler a = new LoginEventHandler(this.ReBack);
                return ServiceLogin(user, a);
            }
            #endregion

    调用它时,可以这样写:

     Entity.User user = new Entity.User { UserName = "zzl", Password = "zzl123" };
     Console.Write(p.Login(user));
  • 相关阅读:
    Scala-文件操作
    python-数字
    python-访问模型
    scala-包
    Scala对象
    Scala-类
    sql存储过程
    sql视图
    sql基本语句
    sql中级语句
  • 原文地址:https://www.cnblogs.com/lori/p/2082876.html
Copyright © 2011-2022 走看看