.NET CORE与Spring Boot编写控制台程序应有的优雅姿势

本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员、JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写的控制台程序要好。

本文所说的编写控制台程序应有的“正确”方法,我把正确二字加上引号,因为没有绝对的正确,因人而异,因系统设计需求而异,我这里所谓的正确方法是指使用面向对象,依赖注入IOC,切面控制AOP等编码规范来提升程序的性能、整洁度、可读性、可维护性等,最终达到让人感觉有点高大上,有点优雅的样子

先来说说.NET CORE编写控制台程序,目前网络上大把的讲解ASP.NET CORE的编写规范,反而对于.NET CORE控制台程序编写规范介绍比较少,大多停留在Hello Word 程序中,而本文则来讲讲.NET CORE控制台的编写规范(应有的优雅姿势)^ v ^

 如果说不讲什么IOC,DI,AOP等,不讲扩展性,规范性,全部面向过程(方法)编程,那估计没什么好讲的,因为无非就是定义一个class,然后在class中定义一堆的method(方法),如果在方法中需要使用到其它第三方组件,则直接单独引用,引用后进行简单封装util工具类的静态方法,甚至也不用封装,直接使用原生的方法,总之全部都是方法调方法。而这里所演示的编写控制台方法均是尽可能的使用.NET CORE所具有的特性,只有这样才能体现出.NET CORE框架的优势,否则普通控制台程序与.NET CORE控制台程序有什么区别。

编写.NET CORE控制台程序优雅姿势一:(直接使用.NET CORE的 IOC、Logging、Config组件)

代码如下:

//Program.cs using Microsoft.Extensions.DependencyInjection; using System; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.Configuration; using System.IO; namespace NetCoreConsoleApp { class Program { static void Main(string[] args) { //设置config文件 var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appSettings.json", optional: true, reloadOnChange: true).Build(); //设置依赖注入 var provider = new ServiceCollection() .AddLogging(configLogging => //设置日志组件 { configLogging.SetMinimumLevel(LogLevel.Information); configLogging.AddConsole(); }) .AddScoped<IConfiguration>(p => config) .AddScoped<HostService>() .BuildServiceProvider(); var hostService = provider.GetService<HostService>(); hostService.RunAsync();//统一入口服务 Console.WriteLine("提示:程序已正常启动运行,按任意键停止运行并关闭程序..."); Console.ReadLine(); } } } //HostService.cs
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace NetCoreConsoleApp { public class HostService { private readonly IConfiguration config; private readonly ILogger<HostService> logger; public HostService(IConfiguration config, ILogger<HostService> logger) { this.config = config; this.logger = logger; } public void RunAsync() { Task.Run((Action)Execute); } /// <summary> /// 控制台核心执行入口方法 /// </summary> private void Execute() { //TODO 业务逻辑代码,如下模拟 Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = 1; i <= 100; i++) { Console.WriteLine("test WriteLine:" + i); Thread.Sleep(100); } stopwatch.Stop(); logger.LogInformation("Logging - Execute Elapsed Times:{}ms", stopwatch.ElapsedMilliseconds); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfgd.html