当前位置: 首页 > news >正文

做软件下载网站违法吗毕业设计音乐网站开发背景

做软件下载网站违法吗,毕业设计音乐网站开发背景,自己怎么做团购网站首页,中国最顶尖的广告公司一、前言在实际的开发过程中#xff0c;我们经常会遇到这样的情况#xff0c;在进行调试分析问题的时候#xff0c;经常需要记录日志信息#xff0c;这时可以采用输出到控制台。因此#xff0c;我们通常会定义一个日志类#xff0c;来实现输出日志。定义一个生成验证的逻… 一、前言在实际的开发过程中我们经常会遇到这样的情况在进行调试分析问题的时候经常需要记录日志信息这时可以采用输出到控制台。因此我们通常会定义一个日志类来实现输出日志。定义一个生成验证的逻辑处理方法    public class Logger{public void AddLogger(){Console.WriteLine(日志新增成功);}} 然后在控制台中输出结果。        static void Main(string[] args){Logger logger  new Logger();logger.AddLogger();Console.Read();} 看着实现的结果我们以为完成任务了当其实这才是刚刚开始。二、开始相信大家在开发中都会遇到这种情况有时需要控制台输出但也有可能要你输出到文本数据库或者远程服务器等等这些都是有可能。因此最初采用直接输出到控制台已经不能满足条件了所以我们需要将上述代码进行重写改造实现不同的输出方式。2.1 第一种方式2.1.1 控制台方式用到控制台方式输出的时候    /// summary/// 控制台输出/// /summarypublic class ConsoleLogger{public void AddLogger(){Console.WriteLine(控制台输出日志新增成功);}} 定义一个获取输出日志的处理逻辑类因此我们需要定义ConsoleLogger类并初始化    /// summary/// 定义一个输出日志的统一类/// /summarypublic class LoggerServer{private readonly ConsoleLogger consoleLogger  new ConsoleLogger();//添加一个私有变量的对象 个私有变量的数字对象 public void AddLogger(){consoleLogger.AddLogger();}} 控制台输出结果    static void Main(string[] args){LoggerServer loggerServer  new LoggerServer();loggerServer.AddLogger();Console.Read();} ❝「控制台输出日志新增成功」❞2.1.2 文本输出当用到文本输出日志的时候我们再次定义一个生成文本日志的方式    /// summary/// 文本输出/// /summarypublic class FileLogger{public void AddLogger(){Console.WriteLine(文本输出日志新增成功);}} 然后再次定义一个获取验证的处理逻辑类因此我们需要定义ImageVerification类并初始化    /// summary/// 定义一个输出日志的统一类/// /summarypublic class LoggerServer{private readonly FileLogger fileLogger  new FileLogger();//添加一个私有变量的对象 public void AddLogger(){fileLogger.AddLogger();}} 最后输出结果❝「文本输出日志新增成功」❞通过以上的方式我们实现了不同方式输出不同日志方式但是仔细观察可以发现这种方式不是一种良好的软件设计方式。所以可能有人会改成下面第二种方式以接口来实现。2.2 第二种方式定义一个ILogger接口并声明一个AddLogger方法    public interface ILogger{void AddLogger();} 在控制台输出方式中ConsoleLogger类实现ILogger接口    /// summary/// 控制台输出/// /summarypublic class ConsoleLogger : ILogger{public void AddLogger(){Console.WriteLine(控制台输出日志新增成功);}} 在文本输出日志方式FileLogger类中实现ILogger接口    /// summary/// 文本输出/// /summarypublic class FileLogger : ILogger{public void AddLogger(){Console.WriteLine(文本输出日志新增成功);}} 定义一个统一的输出日志类LoggerServer类/// summary /// 定义一个获取验证的统一类 /// /summary public class VerificationServer {private readonly ConsoleLogger consoleLogger  new ConsoleLogger();//添加一个私有变量的对象 //private readonly FileLogger fileLogger  new FileLogger();//添加一个私有变量的对象 public void AddLogger(){_logger.AddLogger();} } 最后控制台调用输出    static void Main(string[] args){LoggerServer loggerServer  new LoggerServer();loggerServer.AddLogger();Console.Read();} ❝「控制台输出日志新增成功」❞虽然第二种方式中采用了接口来实现降低耦合但还是没有达到我们想要的效果因此以上的两种方式都不是很好的软件设计方式。代码可拓展性比较差以及组件之间存在高度耦合违反了开放关闭原则在设计的时候也应当考虑「对扩展开放对修改关闭」。2.3 思考既然要遵循开放关闭原则那上面的写法选择采用控制台日志输出方式所需要的ConsoleLogger创建和依赖都是在统一的日志类LoggerServer内部进行的既然要使内部不直接存在绑定依赖那有没有什么方式从外部传递的方式给LoggerServer类内部引用使用呢三、引入3.1 依赖注入「依赖注入」 : 它提供一种机制将需要依赖对象的引用传递给被依赖对象。下面我们先看看具体的几种注入方式再做小结说明。3.1.1 构造函数注入在LoggerServer类中定义一个私有变量_logger, 然后通过构造函数的方式传递依赖public class LoggerServer {private ILogger _logger; //1. 定义私有变量//2.构造函数public LoggerServer(ILogger logger){//3.注入 传递依赖this._logger  logger; }public void AddLogger(){_logger.AddLogger();} } 通过控制台程序调用先在外部创建依赖对象而后通过构造的方式注入依赖        static void Main(string[] args){#region 构造函数注入// 注入控制台输出方式// 外部创建依赖的对象 - ConsoleLoggerConsoleLogger console  new ConsoleLogger();// 通过构造函数注入 - LoggerServerLoggerServer loggerServer1  new LoggerServer(console);loggerServer1.AddLogger();// 注入 文件输出方式FileLogger file  new FileLogger();// 通过构造函数注入 - LoggerServerLoggerServer loggerServer2  new LoggerServer(file);loggerServer2.AddLogger();#endregionConsole.Read();} 输出:❝控制台输出日志新增成功文本输出日志新增成功❞显然的发现通过这种构造函数注入的方式在外部定义依赖降低内部的耦合度同时也增加了扩展性只需从外部修改依赖就可以实现不同的验证结果。3.1.2 属性注入即通过定义一个属性来传递依赖    /// summary/// 定义一个输出日志的统一类/// /summarypublic class LoggerServer{//1.定义一个属性可接收外部赋值依赖public ILogger _logger { get; set; }public void AddLogger(){_logger.AddLogger();}} 通过控制台定义不同的方式通过不同依赖赋值实现不同的验证结果        static void Main(string[] args){#region 属性注入// 注入 控制台输出方式//外部创建依赖的对象 - ConsoleLoggerConsoleLogger console  new ConsoleLogger();LoggerServer loggerServer1  new LoggerServer();//给内部的属性赋值loggerServer1._logger  console;loggerServer1.AddLogger();// 注入 文件输出方式//外部创建依赖的对象 - FileLoggerFileLogger file  new FileLogger();LoggerServer loggerServer2  new LoggerServer();//给内部的属性赋值loggerServer2._logger  file;loggerServer2.AddLogger();#endregionConsole.Read();} 输出❝控制台输出日志新增成功文本输出日志新增成功❞3.1.3 接口注入先定义一个接口包含一个设置依赖的方法。    public interface IDependent{void SetDepend(ILogger logger);//设置依赖项} 这个与之前的注入方式不一样而是通过在类中「继承并实现这个接口」。    public class VerificationServer : IDependent{private ILogger _logger;// 继承接口并实现依赖项方法注入依赖public void SetDepend(ILogger logger){_logger  logger;}public void AddLogger(){_logger.AddLogger();}} 通过调用直接通过依赖项方法传递依赖        static void Main(string[] args){#region 接口注入// 注入 控制台输出方式//外部创建依赖的对象 - ConsoleLoggerConsoleLogger console  new ConsoleLogger();LoggerServer loggerServer1  new LoggerServer();//给内部赋值通过接口的方式传递loggerServer1.SetDepend(console);loggerServer1.AddLogger();//注入  文件输出方式//外部创建依赖的对象 - FileLoggerFileLogger file  new FileLogger();LoggerServer loggerServer2  new LoggerServer();//给内部赋值通过接口的方式传递loggerServer2.SetDepend(file);loggerServer2.AddLogger();#endregionConsole.Read();} 输出❝控制台输出日志新增成功文本输出日志新增成功❞3.1.4 小结「依赖注入(DI—Dependency Injection)」「它提供一种机制将需要依赖对象的引用传递给被依赖对象」通过DI我们可以在LoggerServer类在外部ConsoleLogger对象的引用传递给LoggerServer类对象。 注入某个对象所需要的外部资源包括对象、资源、常量数据❝依赖注入把对象的创造交给外部去管理,很好的解决了代码紧耦合的问题是一种让代码实现松耦合的机制。 松耦合让代码更具灵活性能更好地应对需求变动以及方便单元测试。❞3.2 IOC「控制反转」Inversion of Control缩写为「IoC」在面向对象编程中是一种「软件设计模式」教我们如何设计出更优良更具有松耦合的程序。在上文的例子中我们发现如果在获取对象的过程中靠类内部主动创建依赖对象则会导致代码直接高度耦合并且期存在难以维护这种隐患所以为了避免这种问题我们采用了由外部提供依赖对象内部对象类被创建的时候将其所依赖的对象引用传递给它实现了依赖被注入到对象中去。❝通俗的说明在类A中用到了类B的对象时候一般情况下需要在A的代码中显式的new一个B的对象。这种方式都是通过我们自己主动创建出来的创建合作对象的主动权在自己手上自己需要哪个对象就主动去创建创建对象的主动权和创建时机是由自己把控的而这样就会使得对象间的耦合度高了A对象需要使用对象B来共同完成一件事A要使用B那么A就对B产生了依赖也就是A和B之间存在一种耦合关系并且是紧密耦合在一起。public class A { private B b  new B();//主动的new一个B的对象。主动创建出来 public void Get() {B.Create(); } } 采用依赖注入技术之后A的代码只需要定义一个私有的B对象不需要直接new来获得这个对象而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。现在创建对象而是有第三方控制创建你要什么对象它就给你什么对象依赖关系就变了原先的依赖关系就没了A和B之间耦合度也就减少了。public class A { private B b;//外部new出来, 注入到引用中 public void Get() {B.Create(); } } ❞3.3 关系「控制反转IoC」 是一种软件设计的模式指导我们设计出更优良更具有松耦合的程序而具体的实现方式有「依赖注入」和「依赖查找」。在这一篇主要说的是常用的「依赖注入」方式。你在实际开发中可能还会听到另一名词叫 「IoC容器」这其实是一个依赖注入的「框架」用来映射依赖管理对象创建和生存周期。 (在后续篇章会具体说明)四、思考说到依赖就想到依赖注入和工厂模式这两者的区别这是网上有一个对比例子工厂设计模式依赖注入对象创建它用于创建对象。我们有单独的Factory类其中包含创建逻辑。它负责创建和注入对象。对象的状态它负责创建有状态对象。负责创建无状态对象运行时/编译时间在编译时创建对象在运行时配置对象代码变更如果业务需求发生变化则可能会更改对象创建逻辑。无需更改代码机制类依赖于工厂方法而工厂方法又依赖于具体类父对象和所有从属对象可以在单个位置创建好啦这篇文章就先讲述到这里吧「在后续篇章中会对常用的IOC容器进行使用说明」希望对大家有所帮助。如果有不对的或不理解的地方希望大家可以多多指正提出问题一起讨论,不断学习,共同进步。????
http://www.huolong8.cn/news/4392/

相关文章:

  • 做网站用到什么技术wordpress 4.4漏洞
  • 网站制作外包价格做购物网站骗人
  • 小木桥路建设工程招投标网站页面设计要怎么做
  • 晋中网站建设电话临沂森佳木业有限公司
  • 食品网站应该怎么做哪个网站做长图免费转高清
  • 四川住房城乡建设厅网站首页贵阳seo网站推广
  • 最新网站制作seo综合查询接口
  • 服务佳的网站建设遵义做网站哪个公司最好
  • 网站建设企业服务商百家号如何给网站做推广
  • 栾川网站开发网站seo分析报告案例
  • 建设网站如何加入搜索老总办公室装修风格
  • 网站内链建设门户网站建设 增强责任意识
  • 网站侧边栏菜单广东平台网站建设制作
  • 站长工具百度百科房屋装修效果图app有哪些
  • 网站建设方案书1500字wordpress协会主题
  • 网站处于建设中会显示什么英文c2c网站功能模块设计
  • wordpress图片站点云南省人防工程建设网站
  • 企业自助建站金融 网站 源码
  • 网上商城建设网站常规seo优化步骤
  • 有什么网站是python做的网站dede后台
  • 注册个人公司流程及费用内蒙古seo
  • 做网站需要画原型图么网站建设改变某个表格大小
  • 做网站做得好的公司有哪些网站上的flv视频看不了
  • 哇哈哈网站建设策划书渠道推广方案
  • l网站建设携程网站建设的优缺点
  • 网站上线 flashwordpress落地页改造
  • 做视频网站容易收录吗店铺首页如何设计
  • 长沙建网站的公司多少钱wordpress 模拟word
  • 网站找人做seo然后网站搜不到了企业信息填报指南
  • 有哪些网站做的比较好看的图片有哪些网站做自建房设计