14 .NET 패키지는 항상 추천합니다.


이 글은 내가 자주 사용하고 추천하는 Nuget.org에 사용할 수 있는 소스 라이브러리를 보여 준다.이러한 패키지는 사용자의 시간을 절약하고 응용 프로그램을 더욱 좋아지게 할 것입니다.그들은 좋은 문서와 좋은 개발 경험을 가지고 있다.

MediatR


MediatRmediator pattern의 간단한 프로세스 내에서 이루어진다.그것은 개발자가 깨끗하고 결합되며 확장 가능한 코드를 작성하는 데 도움을 준다.Mediator는 의존 주입을 사용하여 설정된 것으로, 에 대한 기존 지원을 가지고 있습니다.NET Core, Autofac 및 기타 회사documentation on Github는 공부를 시작하기에 가장 좋은 곳이다.
나는 MediatR을 사용하여 Irequest 인터페이스를 사용하여 간단한 명령 조회 형식 요청을 작성하는 것을 좋아한다.Irequest 는 단일 프로세서에 보내는 메시지를 처리합니다.표준 웹 응용 프로그램에서 iRequest 유형의 예는 "GetUserQuery"또는 "UpdateCarCommand"일 수 있습니다.다음 예는 내부 플러그인 클래스를 사용하여 조회 모델과 조회 처리 프로그램을 하나의 클래스에 저장합니다.
//a simple "query" type request
public class GetUserQuery : IRequest<User>
{
    public int UserID { get; set; }

    internal class GetUserQueryHandler : IRequestHandler<UserGetQuery, UserDto>
    {
        private readonly UserService _userService;

        public UserGetQueryHandler(UserService userService)
        {
            _userService = userService;
        }

        public async Task<UserDto> Handle(GetUserQuery request, CancellationToken cancellationToken)
        {
            //normlly something more extensive here...
            return await _userService.GetUser(request.UserID);
        }
    }
}

//calling code
var user = await mediator.Send(new GetUserQuery(1));
간단한 "조회"형식의 미디어tr 요청
Mediatr는 또한 알림 메시지를 지원하며 INotification을 통해 여러 개의 프로세서를 사용할 수 있습니다.알림의 작업 방식은 요청과 유사하지만 값을 되돌려주지 않습니다.그것들은 응용 프로그램에 '확장점' 을 공개하기에 매우 적합하며, 이후에 이를 바탕으로 구축해야 할 수도 있다.

As a side note: everything Jimmy Bogard writes code or otherwise is great.


Serilog


Serilog 구조화된 로그 기록을 제공하여 출력을 거의 어디에나 배치할 수 있다.구조화 로그는 로그 문장과 대상을 json으로 포착합니다.그것들은 응용 프로그램에서 발생하는 일에 대해 더 많은 상하문을 제공하고, 정확한 도구를 사용하면 표준 텍스트 로그보다 그것들을 더 상세하게 조회하고 분석할 수 있다.
var position = new { Latitude = 25, Longitude = 134 };
var elapsedMs = 34;

log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);

//log output
//{"Position": {"Latitude": 25, "Longitude": 134}, "Elapsed": 34}
Serilog 웹 사이트의 예
Serilog의 가장 좋은 점은 지역 사회에서 수신기를 작성했다는 것이다. 이 수신기는 당신이 생각할 수 있는 거의 모든 서비스를 공급자에게 로그에 쓸 수 있다.provided sinks Github 페이지에는 전체 목록이 있습니다.다음은 제가 추천하는 몇 가지입니다.

  • Seq - 자체 관리형 구조화 로그 뷰어

  • Sentry - 오류 로그 이벤트를 자동으로 삽입하는 예외 보고 서비스
  • 불길


    Hangfire는 간단한 방법으로 예정된 작업을 실행하거나 시작하고 백엔드 작업을 잊어버릴 수 있다.NET 코어 및 프레임워크 응용 프로그램나는 실행하기가 얼마나 쉬운지 좋아한다. 왜냐하면 작업은 응용 프로그램의 메인 프로세스에서 실행할 수 있기 때문에 전문적인 서비스가 필요하지 않기 때문이다.
    //Fire and forget
    BackgroundJob.Enqueue(() => {
        Console.WriteLine("This will run once, in the background");
    });
    
    //Recurring job
    RecurringJob.AddOrUpdate(
        () => {
            Console.WriteLine("This will run daily");
        },
        Cron.Daily
    );
    
    //Calling a dependency injection job
    BackgroundJob.Enqueue<MyService>(myService => myService.Execute());
    
    예를 들다
    Hangfire는 강력한 내장 대시보드, 의존 주입 지원, SQL 서버, PostgreSQL, Redis 등의 저장 옵션을 갖추고 있다.
    Hangfire 대시보드

    FluentEmail


    FluentEmail 10분 이내에 애플리케이션에서 전체 e-메일 전송 기능을 구현할 수 있도록 도와드립니다.그것은 가장 유행하는 전자 우편 발송자에게 SendGrid와 Mailgun, 그리고 즉시 사용할 수 있는 Razor 템플릿을 제공하는 내장된 서비스를 제공한다.나는 최근에 네가 공부를 시작하도록 full guide to .NET email using FluentEmail 문장을 한 편 썼다.
    var email = await Email
        .From("[email protected]")
        .To("[email protected]", "Luke")
        .Subject("Hi Luke!")
        .Body("Fluent email looks great!")
        .SendAsync();
    
    FluentEmail로 이메일 보내기

    게으름뱅이


    LazyCache는 사용하기 쉽고 라인이 안전하며 개발자에게 친절한 포장기로서 메모리의 캐시에 사용된다.순핵심.나는 예전에 written a bit about LazyCache 캐시 프로그램이 필요할 때마다 그것을 가져갔다.
    LazyCache는 "GetOradd"모드를 사용하여 캐시를 수행합니다. 캐시에서 항목을 요청하고 항목이 없을 때 캐시에 추가하는 기능을 제공합니다.
    var model = await cache.GetOrAddAsync("HomePageData", 
       async () =>
       {
           return homePageService.GetData(); //function to get cachable data
       }
       , new TimeSpan(12, 0, 0) //12 hour cache expiry
    ); 
    
    캐시 GetOradd 호출 예
    Lazy Cache는 확장이 쉬우므로 간단한 메모리 캐시에서 분포식 캐시로 이동할 필요가 있다면 업그레이드는 빈틈이 없을 것입니다.

    깔끔했어


    때때로 솔리드 프레임을 사용하여 SQL 데이터에 액세스하는 것이 너무 느리거나 오버헤드일 수 있습니다.원본 SQL을 실행하고 싶지만, 괜찮은 대상 맵 Dapper 을 얻을 수 있을 때, 이것은 좋은 선택입니다.

    Dapper is a NuGet library that you can add in to your project that will extend your IDbConnection interface.


    Dapper는 기존 데이터베이스 연결 및 확장 방법을 사용하여 원래 SQL을 실행하고 C# 클래스에 매핑합니다.
    public class Dog
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    var dogs = connection.Query<Dog>(
        "select * from Dogs where Age > @Id", //sql query, @ parameters
        new { Age = 5 } //anonymous object to map parameters
    );
    
    
    간결한 질의 예

    마이크로 프로파일러


    MiniProfiler는 간단한 성능 분석기다.NET 코어 및 프레임워크(Ruby, Go 및 Node) 웹 응용 프로그램그것은 자동으로 응용 프로그램의 관건적인 부분인 데이터베이스 접근에 연결될 것이다.Miniprofiler는 응용 프로그램에 아주 좋은 시간 계산 결과를 직접 보여 줍니다.악성 LINQ 조회를 얻기 위해 개발 중에 실행하는 것이 매우 유용합니다.
    Miniprofiler 결과
    Miniprofilergreat setup documentation는 다양한 옵션을 제공합니다.보안상의 이유로, 나는 보통 개발 기간에만 그것을 사용한다.

    린치


    LINQKit는 Linq를 사용하여 엔티티 프레임을 질의하는 데 사용되는 확장 세트입니다.LINQKit에서는 linq 조회 및 조건을 술어로 구성할 수 있습니다.
    내가 LINQKit에 가장 자주 사용하는 방법은Predicate Builder를 사용하여 대량의 조건이 있는 검색을 간소화하는 것이다. (필터가 있는 격자를 생각해 보자.)
    //base linq query
    var users = from u in context.Users
                select u;
    
    //add conditions as required
    var predicate = PredicateBuilder.New<User>(true);
    
    if (!string.IsNullOrWhiteSpace(filters.Name))
        predicate.And(u => u.Name.Contains(filters.Name));
    
    if (!string.IsNullOrWhiteSpace(filters.Email))
        predicate.And(u => u.Email.Contains(filters.Email));
    
    //apply conditions to query
    var filteredUsers = users.AsExpandable().Where(predicate);
    
    선택적 질의 기준을 추가하는 LINQKit 용어의 예

    FluentMigrator 또는 DbUp


    Entity Framework 코드의 우선 이동을 실행할 대체 방안을 찾고 있다면, Fluent Migrator와 DbUp 모두 이 작업을 완성할 수 있습니다.
    원본 SQL과 간단한 스크립트를 선호하는 경우DbUp가 가장 적합합니다.콘솔 응용 프로그램을 만들고 내장 리소스로 SQL 파일을 추가하기만 하면 됩니다.간단한 프로그램 코드들cs는 devops 파이프에 쉽게 집적할 수 있는 이전 스크립트를 순서대로 실행합니다.
    내장형 스크립트
    static int Main(string[] args)
    {
        var connectionString = args.FirstOrDefault(); //or some configuration
    
        var upgrader =
            DeployChanges.To
                .SqlDatabase(connectionString)
                .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
                .LogToConsole()
                .Build();
    
        var result = upgrader.PerformUpgrade();
        //omitted error handling...
        return 0;
    }
    
    프로그램대테러 엘리트
    FluentMigrator는 유사한 개념을 채택하고 코드를 바탕으로 하는 방법을 채택했다.원본 스크립트를 추가하는 것이 아니라, 이동할 때마다 클래스를 만듭니다.이 방법은 이전을 구축할 때 더 큰 유연성을 제공합니다. (create foreign key sql 문법을 기억하지 않아도 됩니다.) 그리고 더 완전한 위로/아래로 이동하는 장면을 허용합니다.
    using FluentMigrator;
    
    namespace Migrations
    {
        [Migration(20180430121800)]
        public class AddLogTable : Migration
        {
            public override void Up()
            {
                Create.Table("Log")
                    .WithColumn("Id").AsInt64().PrimaryKey().Identity()
                    .WithColumn("Text").AsString();
            }
    
            public override void Down()
            {
                Delete.Table("Log");
            }
        }
    }
    
    
    로그 테이블 만들기 마이그레이션 예

    CsvHelper


    CsvHelper는 csv 파일을 읽고 쓰기 위한 go-to 패키지입니다.라이브러리는 C# 클래스에 대한 사용자 정의 매핑 클래스 및 규칙을 만들거나 낮은 수준의 행과 열 방법을 직접 사용할 수 있는 유연성을 제공합니다.
    //import csv to a class
    using (var reader = new StreamReader("importfile.csv"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
       csv.Context.RegisterClassMap<YourClassMap>(); //optionally use a mapping class
       var records = csv.GetRecords<YourClass>();
    }
    
    //use a mapping class
    public class YourClass
    {
        public int Id { get; set; }
        public string Name { get set; }
    }
    
    public sealed class YourClassMap : ClassMap<YourClass>
    {
        public FooMap()
        {
            Map(m => m.Id).Name("Identifier"); //overrider column names and more
            Map(m => m.Name).Name("TheName");
        }
    }
    
    //or access columns directly
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        csv.ReadHeader();
        while (csv.Read())
        {
            var id csv.GetField<int>("Id"),
            var name = csv.GetField("Name");
        }
    }
    
    csv 파일 가져오기 예
    csv 파일을 내보내는 데도 비슷한 옵션이 있습니다. 직접 열 쓰기를 사용할 수도 있고, 클래스와 맵을 사용할 수도 있습니다.
    using (var writer = new StreamWriter("path\\to\\file.csv"))
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
       csv.WriteRecords(records);
    }
    
    간단한 csv 내보내기 예시

    하히드


    Hashids for .NET 유튜브 비디오 ID와 유사한 짧은 고유 문자열 식별자를 정수에서 생성합니다.URL 및 공유를 위해 하나 이상의 정수를 간단한 비순서 해시로 변환하는 것이 좋습니다.단지 그것을 안전 대신 쓰지 마라.
    var hashids = new Hashids("example salt");
    
    //creates "R9tGSE" hash
    var id = hashids.Encode(1, 2, 3);
    
    //decodes "R9tGSE" back into int[] {1, 2, 3}
    var numbers = hashids.Decode(id);
    

    인성화자


    Humanizer는 인성화된 읽을 수 있는 문자열에서 날짜, 숫자, 매거 등을 바꾸는 데 사용된다.그것은 여러 가지 데이터 형식을 지원하여 여러 언어와 함께 사용할 수 있다.
    //These are some methods I use all the time, check out the documentation for the full list
    
    //dates
    DateTime.UtcNow.AddHours(-25).Humanize() => "yesterday"
    DateTime.UtcNow.AddHours(4).Humanize() => "4 hours from now"
    
    //timespan
    TimeSpan.FromDays(16).Humanize() => "2 weeks"
    
    //Pluralize and singularize
    "Dog".Pluralize() => "Dogs"
    "Dogs".Singularize() => "Dog"
    
    //truncate
    "Long text to truncate".Truncate(10) => "Long text…"
    
    흔히 볼 수 있는 인성화된 방법

    위조했어


    Bogus는'가짜'데이터 생성기다.그물프레젠테이션 데이터와 테스트 데이터를 만들어야 한다는 생각에 나는 몸서리쳤지만 위조 데이터는 일부 고통을 없앴다.
    '가짜'는 C# 클래스를 가짜 데이터에 비추어 대량의 데이터를 신속하게 생성할 수 있다.밑바닥 방법에 직접 접근하고 필요에 따라 전화번호, 이메일 주소 등을 생성할 수 있다.
    //map a class
    var userIds = 0;
    var testUsers = new Faker<User>()
        .RuleFor(b => b.Id, (f, u) => userIds++)
        .RuleFor(u => u.FirstName, (f, u) => f.Name.FirstName(u.Gender))
        .RuleFor(u => u.LastName, (f, u) => f.Name.LastName(u.Gender))
        .RuleFor(u => u.Avatar, f => f.Internet.Avatar())
        .RuleFor(u => u.UserName, (f, u) => f.Internet.UserName(u.FirstName, u.LastName))
        .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName));
    
    //generate users
    var user = testUsers.Generate();
    
    //use methods directly
    var faker = new Faker("en");
    faker.Internet.DomainName(); //eg "sylvester.com"
    faker.Company.Bs().Dump(); // eg "enable leading-edge architectures"
    
    간단한 허위 데이터 생성 예시

    언급할 만하다


    나도 이 도서관들을 좋아하지만, 이 문장은 내가 완성하는 데 아주 오랜 시간이 걸렸다.
  • FluentValidation
  • AutoMapper

  • Autofac - 렉 걸리면.NET framework 이것은 가장 좋은 의존항 주입 옵션입니다
  • 만약 당신이 이 댓글을 좋아한다면 트위터에 댓글을 공유해 주십시오. 만약 내가 당신이 가장 좋아하는 도서관을 놓쳤다면 저에게 알려 주십시오.

    루크 로리🛴

    나는 내가 즐겨 사용하는 14개의 소스 라이브러리를 열거하였으며, 본문에 열거된 라이브러리를 추천하였다👇또는 내 웹 사이트에서 전체 목록 보기lukelowrey.com/recommended-do…
    2021년 3월 22일 오후 20:55

    좋은 웹페이지 즐겨찾기