我们向我们的客户提供一种选择,即采用专题开端人所要求的办法。 为了做到这一点,我们甚至在我国的eXpressApp框架(XAF)产品中实施了类似的解决办法(目标材料和其他目标内容)。 这在大多数情况下没有任何问题,因为各实体的寿命与“案文”相同。 这也有助于我们提高客户在设计其数据模式和业务逻辑时面临同样困难的可用性。
就我们而言,这个领域模式并不伴有具体的持久性技术,因为我们对管理环境有一个特殊的“空间”摘要(除了实体框架之外,我们的产品支持我们内部的办公室管理——电子Xpress Persistent Object(XPO))。
因此,我们向客户提供国际宇宙空间链接接口(拥有单一宇宙空间物体财产),该接口应由需要商业逻辑背景的实体实施。
此外,我们还提供了一种第九聋,人。 针对最受欢迎的商业规则,目标接口(与OnCreated、OnLoaded、OnSaving方法) 举例来说,一个实体实施《英国刑法》的两种接口:
// IObjectSpaceLink
IObjectSpace IObjectSpaceLink.ObjectSpace {
get { return objectSpace; }
set { objectSpace = value; }
}
// IXafEntityObject
void IXafEntityObject.OnCreated() {
KpiInstance kpiInstance = (KpiInstance)objectSpace.CreateObject(typeof(KpiInstance));
kpiInstance.KpiDefinition = this;
KpiInstances.Add(kpiInstance);
Range = DevExpress.ExpressApp.Kpi.DateRangeRepository.FindRange("Now");
RangeToCompare = DevExpress.ExpressApp.Kpi.DateRangeRepository.FindRange("Now");
}
void IXafEntityObject.OnSaving() {}
void IXafEntityObject.OnLoaded() {}
而这里则是我们框架的法典,这些内容是内部的(下文是实体框架6)。
private void ObjectContext_SavingChanges(Object sender, EventArgs e) {
IList modifiedObjects = GetModifiedObjects();
foreach(Object obj in modifiedObjects) {
if(obj is IXafEntityObject) {
((IXafEntityObject)obj).OnSaving();
}
}
}
private void ObjectContext_ObjectMaterialized(Object sender, ObjectMaterializedEventArgs e) {
if(e.Entity is IXafEntityObject) {
((IXafEntityObject)e.Entity).OnLoaded();
}
}
private void ObjectStateManager_ObjectStateManagerChanged(Object sender, CollectionChangeEventArgs e) {
if(e.Action == CollectionChangeAction.Add) {
if(e.Element is INotifyPropertyChanged) {
((INotifyPropertyChanged)e.Element).PropertyChanged += new PropertyChangedEventHandler(Object_PropertyChanged);
}
if(e.Element is IObjectSpaceLink) {
((IObjectSpaceLink)e.Element).ObjectSpace = this;
}
}
else if(e.Action == CollectionChangeAction.Remove) {
if(e.Element is INotifyPropertyChanged) {
((INotifyPropertyChanged)e.Element).PropertyChanged -= new PropertyChangedEventHandler(Object_PropertyChanged);
}
if(e.Element is IObjectSpaceLink) {
((IObjectSpaceLink)e.Element).ObjectSpace = null;
}
}
OnObjectStateManagerChanged(e);
}
public virtual Object CreateObject(Type type) {
Guard.ArgumentNotNull(type, "type");
CheckIsDisposed();
Object obj = CreateObjectCore(type);
if(obj is IXafEntityObject) {
((IXafEntityObject)obj).OnCreated();
}
SetModified(obj);
return obj;
}
我希望这一信息有助于你。