信息系统开发平台OpenExpressApp - 应用模型ApplicationModel
下圖為OpenExpressApp的系統(tǒng)架構(gòu)圖,其中在應(yīng)用模型是作為一種元數(shù)據(jù)貫穿于整個(gè)架構(gòu),應(yīng)用模型運(yùn)行在OpenExpressApp框架之上。應(yīng)用模型是OEA的核心,理解好應(yīng)用模型才能更好的使用OEA。
應(yīng)用模型貫穿于整個(gè)架構(gòu)層
模型關(guān)注what
OEA希望從重復(fù)的技術(shù)工作中脫離出來(lái),在經(jīng)過(guò)大量實(shí)踐基礎(chǔ)之上對(duì)一些常用功能進(jìn)行抽象,整理和總結(jié)出一些通用模型,在基于模型的描述下,我們更加關(guān)注的是what,而不是how。OpenExpressApp平臺(tái)建模工具計(jì)劃支持企業(yè)架構(gòu)建模(EA)、界面建模(UI)、命令擴(kuò)展(Command)、領(lǐng)域建模(Domain)、規(guī)則建模(Rule)、報(bào)表模型(Report)和工作流模型(Workflow)。目前OEA的應(yīng)用模型主要有UI模型和Command模型。
模型可以通過(guò)多種方式定義,如代碼、屬性標(biāo)識(shí)和建模等,目前OEA支持類(lèi)屬性標(biāo)識(shí)生成應(yīng)用模型,這個(gè)一般用在簡(jiǎn)單應(yīng)用軟件中,計(jì)劃加入建模工具,那時(shí)就不需要在類(lèi)庫(kù)中標(biāo)識(shí)UI模型了。
ApplicationModel
既然我們使用模型來(lái)開(kāi)發(fā),那么必然會(huì)有一個(gè)存放模型的地方,在OEA中UI模型和Command模型都統(tǒng)一放置在ApplicationModel靜態(tài)類(lèi)中。
Code
????? ///?應(yīng)用程序模型
??????public?static?class?ApplicationModel
????{
??????? ///?應(yīng)用程序中所有的命令對(duì)象
??????? public?static?readonly?CommandCollection?Commands?=?new?CommandCollection();
??????? ///?默認(rèn)的所有業(yè)務(wù)對(duì)象模型集合 public?static?readonly?ObservableCollection<BusinessObjectInfo>?DefaultBusinessObjectInfos?=?new?ObservableCollection<BusinessObjectInfo>();
??????? ///?查找指定類(lèi)型對(duì)應(yīng)的業(yè)務(wù)對(duì)象模型元數(shù)據(jù), 如果沒(méi)有查找到,則生成并存儲(chǔ)一個(gè)新的。
????????public?static?BusinessObjectInfo?AddBusinessObject(Type?boType)
????????{
????????????BusinessObjectInfo?info?=?null;
????????????BusinessObjectInfoDict.TryGetValue(boType,?out?info);
????????????if?(info?==?null)
????????????{
????????????????info?=?new?BusinessObjectInfo(boType);
????????????????BusinessObjectInfoDict.Add(boType,?info);
????????????????if?(info.IsDefaultObject)
????????????????{
????????????????????DefaultBusinessObjectInfos.Add(info);
????????????????}
????????????}
????????????return?info;
????????}
?????? public?static?BusinessObjectInfo?GetBusinessObjectInfo(Type?boType)
????????{
????????????BusinessObjectInfo?info?=?null;
????????????BusinessObjectInfoDict.TryGetValue(boType,?out?info);
????????????if?(null?==?info)
????????????{
????????????????info?=?AddBusinessObject(boType);
????????????}
????????????return?info;
????????}
????} 應(yīng)用模型中有三個(gè)重要的類(lèi):
??public?BusinessObjectInfo(Type?boType)
????????{
? ...
??????????? foreach?(PropertyInfo?item?in?boType.GetProperties())
????????????{
????????????????if?(item.HasMarked<EntityPropertyAttribute>())
????????????????{
????????????????????BOPropertyInfos.Add(new?BusinessObjectPropertyInfo(item,?this));
????????????????}
????????????????if?(item.HasMarked<AssociationAttribute>())
????????????????{
????????????????????AssociationAttribute?attr?=?item.GetSingleAttribute<AssociationAttribute>();
????????????????????BOsPropertyInfos.Add(new?BusinessObjectsPropertyInfo(item,?attr,?this));
????????????????????if?(attr.ShowInTree)
????????????????????{
????????????????????????TreeChildPropertyInfo?=?item;
????????????????????}
????????????????}
????????????}
????????}
UI模型
信息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp - 內(nèi)置支持的屬性編輯方式
信息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp - 內(nèi)置支持的列表編輯方式
信息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp - 理解核心元素ObjectView
信息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp - AutoUI自動(dòng)生成界面
Command模型
信息系統(tǒng)開(kāi)發(fā)平臺(tái)OpenExpressApp - Command擴(kuò)展機(jī)制
更多內(nèi)容: 開(kāi)源信息系統(tǒng)開(kāi)發(fā)平臺(tái)之OpenExpressApp框架.pdf
?
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自周金根 [ http://zhoujg.cnblogs.com/ ]
轉(zhuǎn)載于:https://www.cnblogs.com/zhoujg/archive/2009/11/16/1603824.html
總結(jié)
以上是生活随笔為你收集整理的信息系统开发平台OpenExpressApp - 应用模型ApplicationModel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nyoj 55 懒省事的小明 优先队列
- 下一篇: java信息管理系统总结_java实现科