Пример #1
0
        //自定义扩展功能2:通过第三方的接口付款(这个接口通常由专门的人去开发)
        public int CallPayInterface(CourseOrder order)
        {
            //在这里调用编写第三方支付接口的调用过程...

            Console.WriteLine("切入方法2:第三方支付接口的调用过程...");
            return(1);
        }
Пример #2
0
        //自定义扩展功能1:验证上课时间是否和其他课程冲突,以便提示学员是否决定报名
        public bool AddedValidateTime(CourseOrder order)
        {
            //在这里编写具体的验证过程...

            Console.WriteLine("切入方法1:报名前的上课时间是否冲突检验方法...");
            return(false);
        }
Пример #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("-------【AOP】面向切面编程-------\r\n\r\n");

            //创建订单信息对象
            CourseOrder order = new CourseOrder
            {
                CourseId    = 1001,
                CourseName  = ".NET高级VIP课程",
                CoursePrice = 3500,
                SchoolId    = 502102,
                StudentId   = 293400
            };

            //【1】基于普通的接口编程
            Console.WriteLine("【基于普通接口编程】\r\n");
            IOrderService orderService = new OrderService();
            int           result       = orderService.SubmitOrder(order);

            Console.WriteLine("订单提交返回结果:" + result);

            //【2】基于装饰器设计模式为核心业务切入方法
            Console.WriteLine("\r\nAOP实现方式1:【基于装饰器设计模式为核心业务切入方法】\r\n");
            orderService = new AOPBasedDecorator(orderService);
            result       = orderService.SubmitOrder(order);
            Console.WriteLine("订单提交返回结果:" + result);


            Console.Read();
        }
Пример #4
0
        public virtual int SubmitOrder(CourseOrder order)
        {
            //在这里编写具体的查询业务...

            Console.WriteLine("--------------------------------《核心业务》课程订单被正确提交...");

            return(1000);
        }
Пример #5
0
        //自定义扩展功能3:课程报名成功后,把当前学员的当前课程加入上课提醒日志
        public bool AddedReminder(CourseOrder order)
        {
            //在这里编写具体的验证过程...


            Console.WriteLine("切入方法3:报名后的上课弹窗提醒方法...");
            return(true);
        }
Пример #6
0
        static void Main(string[] args)
        {
            Console.WriteLine("-------【AOP】面向切面编程-------\r\n\r\n");

            //创建订单信息对象
            CourseOrder order = new CourseOrder
            {
                CourseId    = 1001,
                CourseName  = ".NET高级VIP课程",
                CoursePrice = 3500,
                SchoolId    = 502102,
                StudentId   = 293400
            };

            //【1】基于普通的接口编程
            Console.WriteLine("【基于普通接口编程】\r\n");
            IOrderService orderService = new OrderService();
            int           result       = orderService.SubmitOrder(order);

            Console.WriteLine("订单提交返回结果:" + result);

            //【2】基于装饰器设计模式为核心业务切入方法
            Console.WriteLine("\r\nAOP实现方式1:【基于装饰器设计模式为核心业务切入方法】\r\n");
            orderService = new AOPBasedDecorator(orderService);
            result       = orderService.SubmitOrder(order);
            Console.WriteLine("订单提交返回结果:" + result);

            //【3】基于动态代理方式为核心业务切入方法
            Console.WriteLine("\r\nAOP实现方2:【基于远程动态代理方式为核心业务切入方法】\r\n");
            //通过代理产生具体的OrderServiceProxy对象,但是这个过程细节,其实我们根本看不到
            IOrderService orderService3 = ProxyBusiness.CreateObject <OrderServiceProxy>();

            //调用核心业务
            result = orderService3.SubmitOrder(order);//实际上调用的是Invoke方法
            Console.WriteLine("订单提交返回结果:" + result);
            Console.WriteLine("---------------------------------------------------------------");
            List <CourseOrder> list = orderService3.GetAllOrders();

            //【4】基于第三方Castle动态代理方式为核心业务切入方法
            Console.WriteLine("\r\nAOP实现方3:【基于第三方Castle动态代理方式为核心业务切入方法】\r\n");
            ProxyGenerator generator  = new ProxyGenerator();//为类或接口提供代理对象
            AOPBasedCastle intercepor = new AOPBasedCastle();
            //基于Castle动态代理完成对象创建
            IOrderService orderService4 = generator.CreateClassProxy <OrderServiceCastle>(intercepor);

            result = orderService4.SubmitOrder(order);//实际上调用的是Invoke方法
            Console.WriteLine("订单提交返回结果:" + result);


            Console.Read();
        }
Пример #7
0
        public int SubmitOrder(CourseOrder order)
        {
            //【1】切入第1个方法
            AddedValidateTime(order);

            //【2】切入第2个方法
            CallPayInterface(order);


            int result = this.orderService.SubmitOrder(order);//原有核心业务的调用(具体怎么实现,这里并不关心)


            //【3】切入第3个方法
            AddedReminder(order);

            return(result);
        }