mm_os
Version:
MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。
100 lines (89 loc) • 2.03 kB
JavaScript
const {
Drive
} = require('mm_machine');
/**
* 领域服务基类
* 负责协调多个模型和业务逻辑,提供业务操作的高级抽象
*/
class Service extends Drive {
static config = {
// 服务名称
name: 'default',
// 依赖的富血模型
models: [],
};
/**
* 构造函数
* @param {object} config 配置参数
* @param {object} parent 父对象
*/
constructor(config, parent) {
super({ ...Service.config, ...config || {} }, parent);
// 模型实例集合
this._model = {};
}
}
/**
* 获取模板目录
* @returns {string} 模板目录
*/
Service.prototype.getTplDir = function() {
return __dirname;
};
/**
* 初始化核心
* @param {object} model 模型实例集合
* @param {object} eventer 事件管理器
* @param {object} logger 日志管理器
*/
Service.prototype._initCore = async function(model, eventer, logger) {
// 初始化依赖项
if (logger) {
this.setLogger(logger);
}
if (eventer) {
this.getEventer = function () {
return eventer;
};
}
if (model) {
this._model = model;
}
this._checkDeps();
};
/**
* 检查依赖项
* @private
*/
Service.prototype._checkDeps = function() {
let {
models
} = this.config;
for (var i = 0; i < models.length; i++) {
var name = models[i];
if (!this._model[name]) {
this.log('error', `model ${name} 未找到`);
}
}
};
/**
* 销毁服务
*/
Service.prototype._destroy = function() {
// 清理依赖引用
this._model = {};
// 移除所有监听器
this.removeAllListeners();
};
/**
* 获取模型实例
* @param {string} name 模型名称
* @returns {object | null} 模型实例或null
*/
Service.prototype.getModel = function(name) {
if (!name || typeof name !== 'string') {
throw new Error('模型名称必须是非空字符串');
}
return this._model[name] || null;
};
exports.Service = Service;