Skip to content

INotfound/Magic

Repository files navigation

Magic

简介

​ Use Standard C++ 11 && CMake.

​ 基于IoC和AoP的快速开发库(C++ Rapid development library based on Inversion of Control And Aspect Oriented Programming Support),配合CMake构建套件开发,支持跨平台开发,并配备了更多的高性能组件.

特点

快速开发


  • 高内聚,低耦合.
  • 无任何侵入式代码.
  • 超强的通用性以及高度跨平台.
  • 实现模块化开发方式便于协作开发.
  • 支持Http/WebSocket协议以及WebServer开发
  • 基于 IoC(Inversion of Control) 以及 AoP(Aspect Oriented Programming Support).

模块配置


  • 支持灵活配置各个模块.
  • 功能模块可高度重用,方便扩展以及维护.
  • 使用Json格式配置文件(*.json)对功能进行模块划分.

安装


只需支持C++11的编译器以及CMake构建工具编译即可, 编译可选项: MySql Zlib SSL.

  • Linux
    1. Gnu构建套件 (跳转在库路径中)
    • mkdir build && cd build && cmake ../. && make && make install
    1. Ninja构建套件 (推荐.跳转在库路径中)
    • mkdir build && cd build && cmake -GNinja ../. && ninja && ninja install
  • Win
    • VS 20XX
      • cmake -G "Visual Studio 15 2017" // or Visual Studio xx 20xx

使用方法


  1. 使用本库工具 Magic/Bin/Create

    1. 创建项目文件目录名,跳转项目文件目录中
    2. 使用 Create Test /root/Magic 创建项目模板, (Test 项目名) ("/root/Magic" Magic库路径)
    3. 当前目录会生成 CMakeLists.txt Main.cpp Test.json三个文件
  2. 打开Test.json配置文件,并添加上需要IoC管理的类.

  3. CMakeLists.txt配置文件进行编辑添加Test模块(Test.json)

set(MODULES
    ${MAGIC}/Modules/Magic.json
    ${PROJECT_SOURCE_DIR}/Test.json # Test.json 模块
)
  1. 创建并跳转build目录中 调用 cmake ../. 并且进行Build.
  2. 打开Main.cpp源文件,添加一下代码.
#include "Test.h" //添加头文件

int main(){
    auto application = std::make_shared<Magic::Application>();
    application->initialize([](const Safe<Magic::Container>& ioc){
    });
    return EXIT_SUCCESS;
}
  1. Make Or Ninjia 编译即可

本库示例


配置文件:Magic模块 (可使用多个配置文件)

{                                                           // 日志以及配置模块示例
    "Configurations":{
        "Registered":[                                      // 类信息注册(强制,必须要具有一个).
            {
                "Id":"config",                              // 类Id标识(任意名).
                "Class":"Magic::Config",                    // 类名,如果有namespace,则需加上即可.
                "IncludePath": "Include/Core/Config.h",     // 类所在的文件路径(如何有相同的可以忽略).
                "Interface":"",                             // 继承的接口类,通常需要抽象的时候才使用.
                "Dependencies":[],                          // 依赖的其他类的类名.
                "FunctionPropertys":["addConfigFile"]       // 需要注册的属性函数.
            },
            {
                "Id":"configFile",                          // 与Magic::Config同文件,则不需要在此定义IncludePath
                "Class":"Magic::ConfigFile",
                "FunctionPropertys":["addFormatter"]
            },
            ......
        ],
        "Initialize":[                                      // 初始化(非强制)
            {
                "Id":"logger",
                "InvokeFunctions":{
                    "externMode":[]                         // 调用Id: logger 对象的externMode函数  
                }
            },
            {
                "Id":"logger",
                "Loop":true,                                // Loop 循环加入接口类对象
                "Callee":"Magic::ILogAppender",             // 接口类类型 若Loop == true则该属性必须具有值.
                "CalleeFunctions":["addILogAppender"],      // 接口类对象添加函数.
            }
        ]
    }
}

.....

注意

本库使用了异常,所有使用异常接口都会有对应 warring 注释标注.

try{
    ...
}catch(Magic::Failure&){
    ...
}

其他

代码规范/联系方式

About

C++ Rapid development library based on Inversion of Control And Aspect Oriented Programming Support.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published