Navi 项目介绍:
在过去的一年里,会员交易系统的下单服务进行了彻底重构。重构后,在下单服务上对接新支付方式的开发时间从过去的三天左右,变为现在的一小时左右,工作效率大幅提高。
这一成绩的实现依靠的是下单服务的核心框架。这套框架能够通过注解、文件等配置方式将不同组件动态组合,形成复杂而又完整的功能。这套框架会根据声明的路由配置,为每一次请求选择合适的组件,从而实现高内聚、低耦合的组件化设计。
为了能让其它项目也能享受到模块化设计的好处,我设计了 Navi 项目。Navi 项目将上述设计通用化,使得普通开发人员也能迅速实现组件化系统。
核心价值:Navi 的核心价值在于能够通过注解配置,实现类似于 MVC 框架那样的路由功能。使得开发人员可以迅速开发出组件化的复杂系统
如何使用:
@EqualMatcher(property = "clientType", value = "android") @VersionMatcher(range = "[1.0.0,2.0.0)") public class AndroidV1OrderCreateHandler implements OrderCreateHandler { } OrderRequest request = new OrderRequest(): request.setClientType("android"); request.setVersion("1.5.0"); // this handler is AndroidOrderCreateHandler public class OrderCreateService { public OrderCreateResponse createOrder(OrderRequest request) { // ... // Trunk Logic // ... // Branch Logic OrderCreateHandler handler = selector.select(request, OrderCreateHandler.class); handler.handle(request); // ... // Trunk Logic // ... } }
#include <sstream> #include <ros/console.h> #include <tf/transform_datatypes.h> #include <vector_map/vector_map.h> #include "autoware_msgs/LaneArray.h" #include "lane_planner/lane_planner_vmap.hpp"
Spl标准库 API版本控制 Session 容器服务 日志 系统常量 ShareMemory RPC&SOA
function frameInitialized(); 执行完frameInitialize事件后,框架开始检查并处理运行环境,在执行frameInitialized事件时,框架已经完成的工作有: frameInitialize事件 系统运行目录的检查与创建 运行目录的检查与创建包括了以下工作: 在ROOT目录下创建临时目录Temp 在Temp目录下创建会话存放目录Session 在Temp目录
框架初始化事件 function frameInitialize(); 在CLI模式下启动服务,框架首先进行自身的初始化预处理,然后调用本事件,在执行frameInitialize事件时,框架已经完成的预处理工作有: 系统常量ROOT的定义 注册自动加载与常用名称空间 定义错误处理函数 在该回调函数内可以创建一些全局配置。例如: date_default_timezone_set('Asia/Sh
Cache RPC Cluster Crontab SPl库 DI Invoker Logger
const DI_ERROR_HANDLER = 'DI_ERROR_HANDLER'; const DI_LOGGER_WRITER = 'DI_LOGGER_WRITER'; const DI_SESSION_HANDLER = 'DI_SESSION_HANDLER'; const CONTROLLER_MAX_DEPTH = 'CONTROLLER_MAX_DEPT
ShareMemory是为了解决多进程下进程数据隔离的问题。基于文件+锁的形式来实现。 方法列表 getInstance 用于获取一个ShareMemory实例。 use CoreComponentShareMemory; $share = ShareMemory::getInstance(); //或者是 $share = ShareMemory::getInstance(ShareMemory
Session 以下是一个封装好的Session操作类,可以简化对Session的操作,同时也展示了如何用框架本身的方法操作Session <?php class SessionFacade { /** * Set Session * @param $name * @param $value * @author : evalor <master@ev
log string $str 日志内容 string $category 日志分类名 $log->log('message1'); $log2->log('message2'); console string $str 调试内容 int $saveLog 是否保存 $log->console("message",false); consoleWithTrace string $str 调试内容