【ecos】base核心

基础框架 base

base是ecos的框架核心,可以独立存在,单独部署。
base尽量保持整个核心的干净和独立,主要目的是提供一个高可扩展性并能适应高并发集群化的基础PHP框架。
base内建基础MVC套件、app机制、app包管理机制、异常处理、缓存、数据存储、队列等。

系统的扩展分为向上扩展和向下扩展

  • 向上扩展(对框架本身的扩展)

    在开发新应用时,可以在base中对MVC扩展、异常处理、缓存、数据存储、队列等进行扩展。(通过app机制实现对系统本身的扩展)

  • 向下扩展(对基于框架开发的应用的扩展)

    对于基于base开发的应用,可以使之具备后续开发应用对其本身的扩展。例如:我们基于base开发了crm应用,同样基于crm开发的应用可以对crm进行扩展。

base主要知识

  • MVC框架 异常处理 UI组件
  • app机制(对系统本身进行扩展)service机制
  • 缓存机制
  • 系统配置
  • 数据存储
    session kv引擎 数据库(mysql)
  • 队列和任务机制
  • api机制
  • 工具
    命令行工具 单元测试 文档生成工具

autoload机制

很多开发者在编写面向对象应用时都会习惯在每一个PHP文件里放置一个类的定义,这样就需要在编写代码之前需要include一大堆类定义文件。
幸运的是从php5开始,可以通过定义__autoload函数来解决,每当开发者尝试使用一个类或接口时,都会调用此函数。
这个机制既避免了因加载不到类产生的报错。

例:

<?php
function __autoload($class_name) {
    include $class_name . '.php';
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
try {
    $obj = new NonLoadableClass();
} catch (Exception $e) {
    echo $e->getMessage(), "\n";
}
?>
输出:
Want to load NonLoadableClass.
Unable to load NonLoadableClass.
ps:php5.3.0及以上版本对自动加载做异常处理

执行流程

浏览器访问->index.php->kernel::boot()->url解析,通过mapper(config/mapper.php)找到对应app->
系统根据app_id,调用对应的router处理类(app/$app_id/lib/router.php)(没有的话调用默认base_router类)->
根据PATH_INFO解析出要调用的app、控制器、方法、参数->调用对应的控制器方法->end

命令行工具

命令行为无反馈系统,这比有反馈系统效率更高。
可以和其他命令协同工作(可以使用管道、cron定时任务,也可以和vim、zend等编辑器结合在一起)
能够适应更丰富的应用场景(批量更新服务器集群配置,自动化,操作远程系统)
使用命令行:linux下需要加php cmd; windows不用 直接cmd;

app机制

ecos完全有app组成,每个app采用统一的约定组装,base app是ecos的内核。

ecos系统包括底层app(base:数据库访问、service管理、app管理、kvstore、kvcache)
支持层app(PAM、DBeav、Site、ectools、Desktop)
业务层app(ecstore、OME)

每个app拥有自己的表, controller, model, view, library, service等资源。
app之间存在依赖关系。
可通过service机制对app进行扩展。

OSGI是JAVA下的一个组件化设计,代表产品是eclipse可以通过组件来扩充功能。
OSGI的部署单位是Bundle, 对应在ECOS中就 是APP。
其共性是具有称为“服务”的扩展接口。通过 Service机制,App之间可以扩展功能,界面,和操作流程。不必担心原有应用升级带来的问题。

sevice机制

还需要研读

setting 专属app的配置信息

类似windows的注册表, 区别在于Ecos是以app为最小部署单元, 因此存储是以app为划分单位的.
数据是存储在kvstore中的(key value形式的存储方式), 后边会详细介绍.

  • 默认数据

    当通过key在kvstore中取不到数据, 会加载app/{$app_id}/setting.php, 在setting.php中查找, 找到后放到kvstore中, 下次就不需要从setting.php中取数据了.

    当冷启动时, 对性能要求高的时候,可以在系统上线前通过脚本把每个app的setting数据提前塞到kvstore中

  • setConf - 存储

    用法:
    app::get($app_id)->setConf($key, $value);

  • getConf - 取回

    用法:
    app::get($app_id)->getConf($key);

  • setting问题

虽然setting数据是按照app, 进行存储的。但仍可能存在命名冲突, 请团队负责人提前约定开发app下命名规则。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值