信息系统开发平台OpenExpressApp - 应用模型ApplicationModel
下圖為OpenExpressApp的系統架構圖,其中在應用模型是作為一種元數據貫穿于整個架構,應用模型運行在OpenExpressApp框架之上。應用模型是OEA的核心,理解好應用模型才能更好的使用OEA。
應用模型貫穿于整個架構層
模型關注what
OEA希望從重復的技術工作中脫離出來,在經過大量實踐基礎之上對一些常用功能進行抽象,整理和總結出一些通用模型,在基于模型的描述下,我們更加關注的是what,而不是how。OpenExpressApp平臺建模工具計劃支持企業架構建模(EA)、界面建模(UI)、命令擴展(Command)、領域建模(Domain)、規則建模(Rule)、報表模型(Report)和工作流模型(Workflow)。目前OEA的應用模型主要有UI模型和Command模型。
模型可以通過多種方式定義,如代碼、屬性標識和建模等,目前OEA支持類屬性標識生成應用模型,這個一般用在簡單應用軟件中,計劃加入建模工具,那時就不需要在類庫中標識UI模型了。
ApplicationModel
既然我們使用模型來開發,那么必然會有一個存放模型的地方,在OEA中UI模型和Command模型都統一放置在ApplicationModel靜態類中。
Code
????? ///?應用程序模型
??????public?static?class?ApplicationModel
????{
??????? ///?應用程序中所有的命令對象
??????? public?static?readonly?CommandCollection?Commands?=?new?CommandCollection();
??????? ///?默認的所有業務對象模型集合 public?static?readonly?ObservableCollection<BusinessObjectInfo>?DefaultBusinessObjectInfos?=?new?ObservableCollection<BusinessObjectInfo>();
??????? ///?查找指定類型對應的業務對象模型元數據, 如果沒有查找到,則生成并存儲一個新的。
????????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;
????????}
????} 應用模型中有三個重要的類:
??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模型
信息系統開發平臺OpenExpressApp - 內置支持的屬性編輯方式
信息系統開發平臺OpenExpressApp - 內置支持的列表編輯方式
信息系統開發平臺OpenExpressApp - 理解核心元素ObjectView
信息系統開發平臺OpenExpressApp - AutoUI自動生成界面
Command模型
信息系統開發平臺OpenExpressApp - Command擴展機制
更多內容: 開源信息系統開發平臺之OpenExpressApp框架.pdf
?
歡迎轉載,轉載請注明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]
轉載于:https://www.cnblogs.com/zhoujg/archive/2009/11/16/1603824.html
總結
以上是生活随笔為你收集整理的信息系统开发平台OpenExpressApp - 应用模型ApplicationModel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nyoj 55 懒省事的小明 优先队列
- 下一篇: 织梦dede 5.7系统基本参数无法修改