简易项目搭建(用于一般杂七杂八的小功能点)

絕刀狂花
发布: 2025-09-18 08:54:28
原创
578人浏览过

在工作中,我们常常会遇到许多需要完成的小功能点。以我自己的工作情况为例,最常见的是两个方面:1、控制台项目;2、web界面(纯前端)。

首先让我们讨论控制台项目的工作内容。在没有使用PostMan之前,工作中大量使用接口调用。在项目准备阶段,首先需要对接口的使用进行描述。在主要使用WebService和WCF服务接口的公司中,可以通过Visual Studio直接进行一套可视化的操作,通过代理类的方法引用接口,这真是C#开发的乐趣所在。言归正传,现在让我们详细讨论一下工作中常用的功能点:1、测试服务接口;2、编写Windows服务。

在控制台项目中完成服务接口测试的功能非常简单,本文主要强调一些常用方法。在编写类项目时,主要会使用三个类库:1、Newtonsoft.Json(JSON序列化);2、log4net(日志记录);3、NUnit(单元测试)。

从业务角度来看,无非就是调用接口进行测试,如果成功则通过,如果失败则记录日志。单元测试的主要目的是为了批量使用接口,测试接口的并发性和其他操作。

Windows服务在我的工作中主要结合任务调度使用,同时结合一些其他技术,如队列和缓存。例如:1、每隔10秒同步一次A数据库(SqlServer)数据到B数据库(Oracle),表名和字段名都不相同;2、每天凌晨2点运行一项或多项任务,成功或失败均记录日志并推送给管理员(通过手机短信、邮件、内部服务平台)。

这些大多是结合任务调度来完成的,通常使用Quartz.Net进行任务调度,将控制台服务转换为Windows服务使用Topshelf,日志记录使用log4net。通过这三个组件,我的一般需求就能得到满足,其他功能点根据需要引用不同的类库。

接下来是简单的项目搭建。项目搭建1.0:新建一个控制台项目,运行环境选择.NET Framework 4.5。

新建解决方案:

简易项目搭建(用于一般杂七杂八的小功能点)

首先引用Nuget包,不同的层引用不同的Nuget,再次简单说明一下:

极简智能王
极简智能王

极简智能- 智能聊天AI绘画,还可以创作、编写、翻译、写代码等多种功能,满足用户生活和工作的多方面需求

极简智能王 33
查看详情 极简智能王
  • Common:基础层
  • Models:实体层
  • Schedules:调度层

进行不同的模块封装。

log4net的引用和封装:log4net不需要做太多的封装,只需提供一个初始化和一个获取日志接口的方法即可。

public class LogFactory
{
    static LogFactory()
    {
        string path = AppDomain.CurrentDomain.BaseDirectory + @"/log4net.config";
        FileInfo configFile = new FileInfo(path);
        log4net.Config.XmlConfigurator.Configure();
    }

    public static ILog GetLogger(string name)
    {
        return LogManager.GetLogger(name);
    }

    public static ILog GetLogger(Type type)
    {
        return LogManager.GetLogger(type);
    }
}
登录后复制

最简单的log4net配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="Console" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="DEBUG" />
        <foreColor value="White" />
      </mapping>
      <mapping>
        <level value="INFO" />
        <foreColor value="Blue" />
      </mapping>
      <mapping>
        <level value="WARN" />
        <foreColor value="Yellow" />
      </mapping>
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="时间:%date 级别:%-5level 日志记录器:%logger%n内容:%message%n%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter" />
    </appender>
    <appender name="LogByDate" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <preserveLogFileNameExtension value="true" />
      <layout type="log4net.Layout.PatternLayout" />
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="Console" />
      <appender-ref ref="LogByDate" />
    </root>
  </log4net>
</configuration>
登录后复制

至此,log4net的工作就完成了。

Newtonsoft.Json:

简易项目搭建(用于一般杂七杂八的小功能点)

版本随意选择。在编程过程中经常会使用JSON的序列化和反序列化,编写一个简单的帮助类:

/// <summary>
/// Json帮助类
/// </summary>
public class JsonHelper
{
    /// <summary>
    /// 将对象序列化为JSON格式
    /// </summary>
    /// <param name="o">对象</param>
    /// <returns>json字符串</returns>
    public static string SerializeObject(object o)
    {
        string json = JsonConvert.SerializeObject(o);
        return json;
    }

    /// <summary>
    /// 解析JSON字符串生成对象实体
    /// </summary>
    /// <typeparam name="T">对象类型</typeparam>
    /// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>
    /// <returns>对象实体</returns>
    public static T DeserializeJsonToObject<T>(string json) where T : class
    {
        JsonSerializer serializer = new JsonSerializer();
        StringReader sr = new StringReader(json);
        object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
        T t = o as T;
        return t;
    }

    /// <summary>
    /// 解析JSON数组生成对象实体集合
    /// </summary>
    /// <typeparam name="T">对象类型</typeparam>
    /// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>
    /// <returns>对象实体集合</returns>
    public static List<T> DeserializeJsonToList<T>(string json) where T : class
    {
        JsonSerializer serializer = new JsonSerializer();
        StringReader sr = new StringReader(json);
        object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
        List<T> list = o as List<T>;
        return list;
    }

    /// <summary>
    /// 反序列化JSON到给定的匿名对象.
    /// </summary>
    /// <typeparam name="T">匿名对象类型</typeparam>
    /// <param name="json">json字符串</param>
    /// <param name="anonymousTypeObject">匿名对象</param>
    /// <returns>匿名对象</returns>
    public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
    {
        T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
        return t;
    }
}
登录后复制

以上就是简易项目搭建(用于一般杂七杂八的小功能点)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号