IA软件架构笔记

来源:互联网 发布:原生js实现trigger 编辑:程序博客网 时间:2024/05/03 14:02

IA软件架构笔记

首先,最基本的是要实现反射机制。

反射机制

通过一个map结构来保存某一个类的名字和指向创建方法的指针。

Map<class::namecreateInstanceMethodPoint<class> >map;createInstanceMethodPoint<T>是一个模板函数,根据T类型创建相应对象。

对于每一个需要用到反射的类,将其加入该map结构。通过registerClass<T>()方法。

前提是,类T需要继承QObject(因为该类提供了类似于QObject::name()的方法)


reflector

用于封装算法的接口,由别的地方调用
进一步细分,他的子类接口有:ICommand(工具栏tool),IMenuItem:ICommand(菜单项), IToolBoxItem : public ICommand(toolbox中的项)


ObjectFactory

各插件的接口

实现一个插件,先继承这个类,实现其中的init方法,1,将必要的算法触发类(xxCommand)加入到反射map;2,将一些必要的control加入到UIService的map中。

ObjectFactoryInstance : public QObject, public ObjectFactory
void ObjectFactoryInstance::init(){    this->registerClass<CoordsItem>();    this->registerClass<CoordsLabel>();    this->registerClass<DataManagerCommand>();}void ObjectFactoryInstance::install(){    UIService* pUIService = ServiceManager::getInstance()->getService<UIService>();    QMainWindow* pWin = pUIService->getControl<QMainWindow>();    pUIService->registerControl(new MapView(pWin), pWin);    pUIService->registerControl(new LayerListView(pWin), pWin);    pUIService->registerControl(new ToolBoxView(pWin), pWin);    ServiceManager::getInstance()->registerService<DataService>(pWin);    ServiceManager::getInstance()->registerService<TaskService>(pWin);}

ServiceInterface

接口

  • init:用于初始化
  • destroy:用于析构

子类
每一个都是一个单例,用于实现相应方面的操作,这样的好处是所有的相同方面的操作都可以通过一个单例来检索到,避免了各处的代码冗余。

DataService : public QObject, public ServiceInterface
用于所有的图层管理操作,如比添加、移除、显示、隐藏等等。

LogService : public QObject, public ServiceInterface
用于所有的log操作:比如logDebug、logError、logInfo等等

UIService : public QObject, public ServiceInterface
用于管理所有的控件,内部一个map结构,mapui。可通过控件名称和类型来得到该控件。
提供一个connetCallback函数,用于调用map结构中所有控件的connetCallback()函数,每个控件会继承UIServiceInterface
,并重写connetCallback()接口

TaskService : public QObject, public ServiceInterface

ShortCutService : public QObject, public ServiceInterface

EventService : public QObject, public ServiceInterface

PluginService : public QObject, public ServiceInterface

UrlService : public QObject, public ServiceInterface
用于管理路径、目录方面的操作,得到临时目录、applicationDir、PluginDir、DefaultDir、ConfigurationDir等目录,创建目录等等


UIServiceInterface

提供了connetCallback()函数的接口类。如果某个插件里面的控件需要与其他插件或者core中的控件进行交互,则该控件应该继承此类,并重写connetCallback()函数,在该函数中doConnection。
这样做的原因是,我们不知道插件的加载顺序,如果我们自己做connection的话可能其他插件还没有加载完成。
我们在所有插件加载完成之后,再通过uiservice来对其map中的所有控件调用connetCallback()

0 0
原创粉丝点击