AOP的两个应用:实体集更新(DateEntityListUpdate)、延迟加载(LazyLoad)(上)
2010-09-30 21:02:56 来源:WEB开发网在FaibClass.Data中,有两个AOP的应用,它们分别是实体集更新(DateEntityListUpdate)、延迟加载 (LazyLoad),目前的DataEntity继承于ContextBoundObject,刚刚从网上看到ContextBoundObject的损耗非常大,但自己测试了一下,应该说影响不是很大,所以暂时不打算使用静态注入了。
注,两个AOP都采用Attribute--Property--Sink的结构,每个类的具体功能请查阅相关的技术资料。
一、实体集更新(DateEntityListUpdate)
在前台设置一个实体的属性,我们在更新整个实体集到数据库的时候,并不知道哪些属性更改过,如果全部更新,将造成不必要的浪费,所以引入了这个概念。如果我们不这样做,模型类的每个属性set后将添加一句代码AddUpdateColumn。
这里使用了.Net的消息链进行处理,因为实体类上还可能使用了其他的AOP。
EntityListUpdatableAttribute类
//*******************************************************************
// 模块:指示实体对象可被集合更新
// 日期:2009-7-29 1:05
// 作者:Faib
// 版权:Copyright Faib Studio 2009
// 官网:http://www.faib.net.cn
// 邮箱:faib920@126.com
// 备注:
//*******************************************************************
using System;
using System.Runtime.Remoting.Contexts;
using System.Runtime.Remoting.Activation;
using FaibClass.Data.Aspect;
namespace FaibClass.Data
{
/// <summary>
/// 指示实体的属性更改后,可以使用Update更新整个实体集,如果不指定此特性,实体的DataState无法置为Modified。
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
public class EntityListUpdatableAttribute : Attribute, IContextAttribute, IContextProperty
{
internal static string propertyName = "EntityListUpdatable";
/// <summary>
/// 构造属性。
/// </summary>
public EntityListUpdatableAttribute()
{
}
string IContextProperty.Name
{
get { return propertyName; }
}
void IContextProperty.Freeze(Context newContext)
{
}
bool IContextProperty.IsNewContextOK(Context newCtx)
{
return true;
}
void IContextAttribute.GetPropertiesForNewContext(IConstructionCallMessage ctorMsg)
{
IContextProperty interceptProperty = new EntityListUpdatableProperty();
ctorMsg.ContextProperties.Add(interceptProperty);
}
bool IContextAttribute.IsContextOK(Context ctx, IConstructionCallMessage ctorMsg)
{
if (ctx.GetProperty(propertyName) == null)
{
return false;
}
return true;
}
}
}
- ››应用云平台的可用性——从新浪SAE看云平台设计
- ››应用程序的配置管理Poco
- ››AOP的两个应用:实体集更新(DateEntityListUpdate...
- ››AOP的两个应用:实体集更新(DateEntityListUpdate...
- ››应用WebSphere MQ V6 来构建企业信息总线的行业示...
- ››应用 Python 解决一些实际问题
- ››应用JScript和XML自定义无刷新多级联动菜单
- ››应用:C/C++获取本机IP地址
- ››应用程序开发者偏好苹果也关注Android
- ››AOP 的利器:ASM 3.0 介绍
- ››应用软件视频会议中的几个常见问题
- ››应用 RSA 实现 EMF 的开发
更多精彩
赞助商链接