zoukankan      html  css  js  c++  java
  • 【.NET中AOP的实现方案】静态代理

    Spring AOP 应该是比较出名的了,今天说的是C#里的AOP,C#的AOP实现的方式有很多种,现在就先介绍静态代理的实现方案;

    模拟场景:我们在删除用户,或者更新用户的时候进行数据原始备份,这样的话需要在删除操作进行之前进行一些数据相应的操作,但是我们又不想在删除操作里面做一些与删除无关的操作,这样使用AOP就解决这个问题了;更新操作也一样。

    下面是示例代码(省略引用):

    1、首先是实体类

    namespace AOP_Test1
    {
        //实体类
        public class User
        {
            public int id { get; set; }
            public String name { get; set; }
            public String password { get; set; }
            //重写方法
            public override string ToString()
            {
                return "id:" + id + ";name:" + name + ";password:" + password;
            }
        }
    }
    


    2、数据操作接口

    namespace AOP_Test1
    {
        //接口,数据操作
        public interface IUser
        {
            void delete(User user);
            void update(User user);
        }
    }
    


    3、接口实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AOP_Test1
    {
        //IUser接口实现
        public class IUserImpl:IUser
        {
            public void delete(User user) {
                System.Console.WriteLine("删除用户");
            }
            public void update(User user) {
                System.Console.WriteLine("更新用户");
            }
        }
    }
    


    4、对IUser进行装饰

    namespace AOP_Test1
    {
        //IUser装饰类
        public class IUserDecorator : IUser
        {
            public IUser iuser { get; set; }
            public IUserDecorator(IUserImpl iUserImpl)
            {
                iuser = iUserImpl;
            }
    
            //删除
            public void delete(User user)
            {
                beforeDelete(user);
                iuser.delete(user);
                afterDelete();
    
            }
            protected void beforeDelete(User user)
            {
    
                Console.WriteLine(DateTime.Now + ":删除之前进行数据备份:");
                Console.WriteLine("备份数据:" + user.ToString());
            }
            protected void afterDelete()
            {
                Console.WriteLine("删除操作完成.");
            }
    
            //更新
            public void update(User user)
            {
                beforeUpdate(user);
                user.name = "TanWeijie";
                iuser.update(user);
                afterUpdate(user);
            }
    
            protected void beforeUpdate(User user)
            {
    
                Console.WriteLine(DateTime.Now + ":更新之前进行数据备份:");
                Console.WriteLine("更新前数据:" + user.ToString());
            }
            protected void afterUpdate(User user)
            {
                Console.WriteLine("更新操作完成.");
                Console.WriteLine("更新后数据:" + user.ToString());
            }
        }
    }
    


    5、测试:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AOP_Test1
    {
        class Program
        {
            static void Main(string[] args)
            {
                User user = new User();
                user.id = 1;
                user.name = "Tan";
                user.password = "123456";
    
                IUser iuser = new IUserDecorator(new IUserImpl());
                iuser.delete(user);
                Console.WriteLine();
                iuser.update(user);
            }
        }
    }
    


    6、测试结果:


    【敬请批评指正】


  • 相关阅读:
    2.4.4.1、Django新建APP(acounts)
    2.4.3、Django用户权限控制
    2.4.2、Django处理登录和注销
    2.4.1、Django使用内置的Admin管理用户
    2.4、使用Django自带的admin用户管理,权限管理
    2.3、django项目对数据库的操作
    2.2、创建第一个Django项目
    2、Django框架介绍
    github设置添加SSH(转)
    form表单回车提交问题
  • 原文地址:https://www.cnblogs.com/james1207/p/3253579.html
Copyright © 2011-2022 走看看