这里描述的AOP功能是专门针对NClay结构体系的,虽然是这样但开发人员在NClay的结构体系下编写逻辑接口或处理控制器时并不需要实现某些接口或承继某些对象来适应后期的AOP功能切入。框架的AOP功能的实现并不是通过Remoting或动态代理的方式实现,而是由框架内部把执行的代码包装成匿名函数传给切入对象,这样开发人员对最终代码执行的控制更方便。接下来通过代码来简单介绍NClay框架的AOP处理方式。

框架对功能横向切入有两个层面,第一是对视图对象处理的功能切入(如:webform请求);第二是业务逻辑处理的功能切入。两者区别在于视图对象的处理范围更广,在实际应用一个视图的功能输入和输出可能包括一个或多个的逻辑处理。


以上通过一个WEB应用程序的结构来描述框架AOP的处理方式,但实际NClay的MVC结构体系并不只针对WEB应用;在WIN程序中也灵活地使用NClay的MVC结构进行开发。下面通过控制台应用程序来展示框架的AOP功能。

public interface IOrderList

{

int EmployeeID

{

get;

set;

}

System.Collections.IList Orders

{

get;

set;

}

}

[NClay.MVC.Controller]

public class Controller

{

public void OrderList(IOrderList view)

{

Console.WriteLine("EmployeeID:" + view.EmployeeID);

Console.WriteLine("Listed...");

}

}

[NClay.MVC.Action(typeof(TestLogic.IOrderList))]

public class OrderListImpl:TestLogic.IOrderList

{

#region IOrderList 成员

private int mEmployeeID;

public int EmployeeID

{

get

{

return mEmployeeID;

}

set

{

mEmployeeID = value;

}

}

private System.Collections.IList mOrders = new System.Collections.ArrayList();

public System.Collections.IList Orders

{

get

{

return mOrders;

}

set

{

mOrders = value;

}

}

#endregion

}

以上是一个简单的订单查询和相关处理代码,在这里OrderList方法并没对查询逻辑成员值进行限制;如果现在相关对象查询逻辑的EmployeeID做出一些限制,当其值在某情况下取消这一次查询;这时候只需要定义一个功能切入对象就可以了,在NClay中定义相关对象非常简单只需要实现NClay.MVC.IAspect接口。

[NClay.MVC.ViewAspect(typeof(TestView.OrderListImpl))]

public class OrderListAccept:NClay.MVC.IAspect

{

#region ICustomAccept 成员

public void Aspect(object source, NClay.MVC.AspectHandler e)

{

TestView.OrderListImpl ol = (TestView.OrderListImpl)source;

if (ol.EmployeeID <= 0)

{

Console.WriteLine("Employee is NULL...");

return;

}

e.Execute(source);

}

#endregion

}

[NClay.MVC.ViewAspect(typeof(TestView.OrderListImpl))]描述针对某个视图的切入,也可以根据实际情况的需要定义这个切入对象应用在多个视图或逻辑接口中。所有东西都完成了下面就通过配置文件把这些功能整合起来,框架的配置文件非常清楚简单:

<configSections>

<section name="NClay" type="NClay.FrameWorkConfigHandler, NClay, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

</configSections>

<NClay>

<!-- 数据访问配置节

<dal>

<DriverType value="NClay.Data.OledbAccess, NClay.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"/>

<ConnectionString  value=""/>

<MappingAssemblys>

<Assembly value="Sales.Model"/>

</MappingAssemblys>

</dal>-->

<!-- MVC Front Controller配置节-->

<mvc>

<controllers>

<Assembly value="TestLogic"/>

</controllers>

<views>

<Assembly value="TestView"/>

</views>

<aspects>

<Assembly value="TestAccept"/>

</aspects>

</mvc>

</NClay>

最后看一下执行的代码和结果:

class Program

{

static void Main(string[] args)

{

TestView.OrderListImpl ol = new TestView.OrderListImpl();

NClay.MVC.Container.Execute(ol);

Console.WriteLine("-------------------------------");

ol = new TestView.OrderListImpl();

ol.EmployeeID = 5;

NClay.MVC.Container.Execute(ol);

Console.Read();

}

}

Employee is NULL...

-------------------------------

EmployeeID:5

Listed...

下载相关程序代码.

NClay框架AOP功能简介相关推荐

  1. autoware框架与功能简介(一)

    autoware框架与功能简介(一) Autoware.AI是世界上第一个用于自动驾驶技术的"All-in-One"开源软件.它ROS1操作系统,并在Apache2.0许可下使用. ...

  2. 从零开始实现一个简易的Java MVC框架(六)--加强AOP功能

    前言 在前面从零开始实现一个简易的Java MVC框架(四)--实现AOP和从零开始实现一个简易的Java MVC框架(五)--引入aspectj实现AOP切点这两节文章中已经实现了AOP功能并且引用 ...

  3. 主流的分布式调度框架、Elastic-job简介、功能和常用介绍

    主流的分布式调度框架.Elastic-job简介.功能和常用介绍 主流的分布式调度框架 Elastic-job简介 功能 常用 主流的分布式调度框架 elastic-job:由当当网基于quartz ...

  4. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  5. DL框架之PyTorch:深度学习框架PyTorch的简介、安装、使用方法之详细攻略

    DL框架之PyTorch:PyTorch的简介.安装.使用方法之详细攻略 DL框架之PyTorch:深度学习框架PyTorch的简介.安装.使用方法之详细攻略 目录 PyTorch的简介 1.pyto ...

  6. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  7. Spring AOP功能和目标

    1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可 ...

  8. Minor【 PHP框架】1.简介

    1.1 Minor是什么 框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star) 1.2 Minor有什么 1.2.1 Minor主要提供了 MVC分层结 ...

  9. Spring AOP知识点简介

    文章目录 1.什么是AOP 1.1.AOP术语 1.2.AOP框架 2.动态代理 2.1.JDK动态代理 2.2.CGLIB动态代理 3.基于代理类的AOP实现 3.1.Spring的通知类型 3.2 ...

  10. 使用AspectJ注解技术实现AOP功能

    AspectJ是一个面向切面编程的框架,使用AspectJ不需要改动Spring配置文件,就可以实现Spring AOP功能.本篇结合实际案例详细讲述使用AspectJ实现AOP功能.通过本篇的学习, ...

最新文章

  1. jQuery的Tab插件 Tabtastic
  2. 检查单 2014-06-20-01
  3. 计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...
  4. 重磅|阿里云发布“一站式敏捷数据仓库解决方案” 实现库仓一体数据分析能力(内含干货PPT下载)
  5. 完善博文 共享内存一写多读无锁实现的代码逻辑部分
  6. fiddler如何filter_Fiddler工具的过滤功能介绍
  7. python购物程序_Python学习:购物程序
  8. linux下mongodb 安装,linux下mongodb安装
  9. artemis服务_artemis小结
  10. 把我的漫画浏览器后台程序迁移到GAE上了
  11. Flink Weekly | 每周社区动态更新(附5月活跃榜单)
  12. 功夫小子实践开发-英雄实体类的基本分析和实现
  13. 计算KL散度与JS散度的MATLAB程序
  14. 记XMPP即时通讯协议的认识
  15. RESTClient使用教程
  16. 叮当管家显示服务器错误,叮当管家【制卡器故障】
  17. python中shape错误_python中shape错误
  18. 银行会计凭证粗略整理
  19. 我的第一篇博客——开篇
  20. 五大电子邮件的营销方法,教你提高客户的回头率!

热门文章

  1. 万得VS腾讯QTrade:兵分两路,B端见?
  2. Rust : link.exe 问题 ---LNK1171 error
  3. Rust: trim(),trim_matches()等江南六怪......
  4. 阿里云产品专家孟威:SLS 全景体验
  5. 中秋福利!开源基础设施峰会9折票!另有限量免费门票!
  6. 【图像增强】基于matlab GUI图像双边滤波【含Matlab源码 1492期】
  7. 【TSP】基于matlab遗传算法求解中国35省会城市旅行商问题【含Matlab源码 1222期】
  8. 【数字信号调制】基于matlab多进制数字相位调制(4PSK)【含Matlab源码 1001期】
  9. 【汉字识别】基于matlab SVM汉字识别【含Matlab源码 830期】
  10. 建站模板论坛_【714】号称全球最快的无代码拖拽集成建站工具?