• 基于laravel4.2的相关架构设计


    项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计。个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习和探讨。特别说明,本文并非对lavarel官方文档的摘抄或总结。

    1异常处理

    1.1异常类

    异常类统一放在app/lib/exception下,可以根据业务模块再细分,对简写的异常类可采用一个文件多个异常类的形式,如:

    class HttpRequestException extends Exception

    {

    }

    class HttpResponseException extends Exception

    {

    }

    1.2捕获机制

    可以在任意需要的地方做异常捕获,如果不捕获,异常将抛出至最外层。

    抛出到最外层的异常,统一在app/start/global.php文件中定义handler

    function handleException($code, $exception)

    {

    return Decorate::failed($code, null, $exception->getFile() . ':' . $exception->getLine() . ',' . $exception->getMessage());

    }

    App::error(function(HttpRequestException $exception, $code)

    {

    return handleException(-1007, $exception);

    });

    App::error(function(HttpResponseException $exception, $code)

    {

             return handleException(-1008, $exception);

    });

    1.3抛出机制

    可在任意可触发异常的地方,抛出异常。

    RequestLog::request($url, $data, $start, $content);

    if (!$content) {

    throw new HttpRequestException($url . ':' . $data);

    }

    2日志记录

    分三类log:接口调用log(RequestLog)、业务log(LogicaltLog)、调试log(DebugLog)。日志统一放在app/lib/log目录下。其中RequestLog可用于接口调用的统计分析,LogicaltLog可以用于记录逻辑数据,DebugLog用于输出调试信息(也可直接用laravel自带的Log类)。

    3任务队列

    Laravle封装了Queue用来做任务队列,用来做异步处理非常方便。支持: "sync", "beanstalkd", "sqs", "iron", "redis"五种形式。建议用redis,超级好用。

    队列使用方法只要将任务类的类名压入队列,并且该任务类实现了fire方法,就可以使用了。

    在fire($job, $data)里,我们还可以拿到任务的尝试次数$job->attempts() ,可以延迟任务响应时间$job->release(30);还可以删掉任务$job->delete();。

    最后特别提醒,可以通过laravel框架的artisan工具启动队列监听:

    php ../../../../artisan --env=devqueue:listen&

    4 Filter

    Filter可以用来做参数验证、登陆态检查、接口调用日志。

    4.1参数检查

    在app /config/param.php里定义各接口的参数验证条件。验证条件自行参考laravel文档。

    然后在app /Filter.php的Before里,对每一个调用进行参数验证,如:

    App::before(function($request))

    {

    $res = Param::verification(Input::all(), $standard);

    }

    4.2接口调用日志

    App::after(function($request, $response)

    {

    RequestLog::log($request, $response);

    });

    5环境切换

    通常,我们的框架会有好几套环境:正式、测试、本地、沙盒等,不同的环境配置肯定会有不同。Laravel允许在进程start的时候,指定当前配置环境,从而做到不同环境之间的自动切换。

    1)  不同的环境配置目录:

    appconfigdev

    appconfigformal

    appconfiglocal

    2)bootstrap/start.php指定需要的环境,例如测试环境dev

    $env = $app->detectEnvironment(‘dev’)

    3)  如何自动切换?

    我们可以做到根据接口请求访问的域名不同,指定相应的环境。比如dev.domain.com为测试环境,domain.com为正式环境。

  • 相关阅读:
    机器学习入门
    elixir 高可用系列
    elixir 高可用系列(五) Supervisor
    elixir 高可用系列(四) Task
    elixir 高可用系列(三) GenEvent
    golang 值得注意的地方(2则)
    elixir 高可用系列(二) GenServer
    elixir 高可用系列(一) Agent
    elixir 入门笔记
    elixir mix 简介
  • 原文地址:https://www.cnblogs.com/itsmylife/p/4047218.html
Copyright © 2020-2023  润新知