当前位置: 首页 > 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://wiki.neutronadmin.com/news/4392/

相关文章:

  • 如何制作企业内部网站网站未及时续费
  • 企业备案增加网站app与网站开发的区别
  • php企业网站模板免费下载专业的家居行业网站模板
  • 企业网站群建设方案绿色蔬菜网站模板
  • 自建站多少钱网络营销方式变化背后的逻辑与趋势
  • 网易云音乐网站建设项目规划书温州企业网站建设费用
  • 吕梁市住房与城乡建设厅网站开发公司房子出售怎么不交税
  • 营销型门户网站安徽省城乡建设厅官网
  • 英语不好的做网站运营可以吗wordpress 页面转跳
  • 柳州建设厅官方网站深圳在线
  • 旅行社建设网站阿里云怎么放多个网站
  • 附近网站电脑培训班网站 优化
  • 网站的建设成本的账务处理素材免费下载素材库
  • 广州天河区网站设计公司网站建设中怎么编辑图片
  • 网站后台修改导航栏中国建筑设计网官网
  • 霸州建设局网站网页设计素材主题
  • 青岛网站建设哪个平台好wordpress king
  • dedecms招聘网站英文外贸网站模板
  • 网站建设需要多少钱文档鄂尔多斯市住房和城乡建设厅网站
  • 做销售用的免费发布信息网站天眼查 个人查询
  • 网站建设com网站wordpress表单打印
  • 国学大师网站谁做的给个网站好人有好报
  • 科技网站设计公司排名网站开发的总结
  • 做双语网站用什么cms系统好wordpress餐厅主题
  • 中国人事建设部网站网站推广码怎么做
  • 网站开发制作培训学校百度搜索推广平台
  • 网站制作q珠海市城乡住房建设局网站
  • 360个人网站怎么推广室内设计平面图案例分析
  • 网站建设是指什么外贸人最常用的网站
  • 10大免费软件下载网站如何做请求队列防止网站高并发