zoukankan      html  css  js  c++  java
  • 作业八之MVC实例应用模式

    六个基本质量属性为可用性、易用性、可修改性、可测试性、安全性、性能

    其中可修改性在MVC中尤为体现,MVC是模型-视图-控制器的缩写,MVC设计模式的思想就是把Web应用程序分为3个核心模块:模型(Model)、视图(View)和控制器(Controller)。这三个模块分别充当不同的角色,完成不同的任务。它们之间彼此又相互联系,构成一个结构分明而又高效的整体。对代码进行修改变得方便,在修改对数据库相关操作的同时也无需对界面进行改动。

    利用MVC模式多产生一些类,来提高程序的可读性与健壮性,单元测试更加方便,提高了可测试性。

    MVC模式下,对不同角色分配不同权限,普通用户和管理员操作不同,提高了安全性。

    分析MVC设计模式在具体网站中的应用

    我们以新浪微博为例,可以用账号登录,同时也可以扫描二维码登录,密码可能会记不住,因此二维码有很大的应用场景。

    下面是一个MVC中使用QrCodeNET生成二维码的一个例子

    QrCode.NET是一个使用C#编写的用于生成二维码图片的类库,使用它可以非常方便的为WinForm等应用程序提供二维码编码输出功能。可以将二维码文件导出为eps格式。

    Model

    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using Gma.QrCodeNet.Encoding;
    using Gma.QrCodeNet.Encoding.Windows.Render;
    
    namespace QRCodeDemo
    {
        public class QRCodeHelper
        {
            /// <summary>  
            /// 生成二维码  
            /// </summary>  
            /// <param name="content">内容</param>
            /// <param name="moduleSize">二维码的大小</param>
            /// <returns>输出流</returns>  
            public static MemoryStream GetQRCode(string content, int moduleSize = 9)
            {
                //ErrorCorrectionLevel 误差校正水平
                //QuietZoneModules     空白区域
    
                var encoder = new QrEncoder(ErrorCorrectionLevel.M);
                QrCode qrCode = encoder.Encode(content);
                GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(moduleSize, QuietZoneModules.Two) , Brushes.Black, Brushes.White);
    
                MemoryStream memoryStream = new MemoryStream();
                render.WriteToStream(qrCode.Matrix, ImageFormat.Jpeg, memoryStream);
                
                return memoryStream;
    
                //生成图片的代码
                //DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
                //Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
                //Graphics g = Graphics.FromImage(map);
                //render.Draw(g, qrCode.Matrix);
                //map.Save(fileName, ImageFormat.Jpeg);//fileName为存放的图片路径
            }
    
            /// <summary>
            /// 生成带Logo二维码  
            /// </summary>
            /// <param name="content">内容</param>
            /// <param name="iconPath">logo路径</param>
            /// <param name="moduleSize">二维码的大小</param>
            /// <returns>输出流</returns>
            public static MemoryStream GetQRCode(string content, string iconPath, int moduleSize = 9)
            {
                QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
                QrCode qrCode = qrEncoder.Encode(content);
                
                GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(moduleSize, QuietZoneModules.Two), Brushes.Black, Brushes.White);
    
                DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
                Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
                Graphics g = Graphics.FromImage(map);
                render.Draw(g, qrCode.Matrix);
    
                //追加Logo图片 ,注意控制Logo图片大小和二维码大小的比例
                //PS:追加的图片过大超过二维码的容错率会导致信息丢失,无法被识别
                Image img = Image.FromFile(iconPath);
    
                Point imgPoint = new Point((map.Width - img.Width) / 2, (map.Height - img.Height) / 2);
                g.DrawImage(img, imgPoint.X, imgPoint.Y, img.Width, img.Height);
    
                MemoryStream memoryStream = new MemoryStream();
                map.Save(memoryStream, ImageFormat.Jpeg);
    
                return memoryStream;
    
                //生成图片的代码: map.Save(fileName, ImageFormat.Jpeg);//fileName为存放的图片路径
            }
        }
    }

    Controller

    public ActionResult CreateQrCode()
     {
           string str = "http://cn.bing.com/search?q=C%23";
           using (var memoryStream = QRCodeHelper.GetQRCode(str))
           {
                 Response.ContentType = "image/jpeg";
                 Response.OutputStream.Write(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);
                 Response.End();
           }
           return null;
    }

    View

    <img id="qrcode" src="@Url.Action("CreateQrCode")"  />
  • 相关阅读:
    Oracle里的执行计划
    Java线程锁总结
    Java面试总结-链接
    oracle 排序函数(转载)
    微软今天的Windows 10硬件发布会汇总:手机瞬间变PC
    DevOps 在公司项目中的实践落地
    阿里云云计算工程师ACP学习笔记--知识点总结
    中小型互联网公司微服务实践-经验和教训
    Prometheus监控的最佳实践——关于监控的3项关键指标
    深度学习的Attention模型
  • 原文地址:https://www.cnblogs.com/qianxia/p/6809909.html
Copyright © 2011-2022 走看看