feel like with the advent of Blazor, the power, usefulness,
and ubiquity of C# and .NET in general has kicked up a notch. At the
same time, the growth in functional programming (LINQ in C#, F#,
fluent APIs/DSLs all give us better ways of both thinking about and
writing our code--we can be more expressive and simpler while being less
error-prone. C# is becoming the best of all worlds as these paradigms
become nearly fully enabled in C# with the variety of NuGet libraries
Here are some interesting NuGet packages that I haven't used yet, but might take advantage of soon.
- FluentValidation - On
my current work project, we just wrote a bunch of complicated (though
not complex) validation code, all custom, and mostly with nested if
statements. I wonder if this would be more readable and intuitive using
a library like this?
- So much of our code is just variations on mapping identifiers,
timestamps, or logic into human-readable forms. This package provides a
ton of methods for doing this in a simpler and more intuitive way.
- FluentMigrator -
So far, I've never worked on a project that has successfully kept its
database schema in code, other than by retaining SQL scripts. Could
this library help?
- Polly -
Retries, timeouts, and more - I've often written custom methods to deal
with various service accessing needs. Next time I feel like I should,
I'll have a look at Polly.
- OneOf -
I see often where I need to return two different types--one for success
and one for an expected failure or "nothing to do" case. Functional
languages have handled this better than OO languages from the start, but
maybe this library could bring me the ability to return OneOf<bool, FailureMessage> or any other union that might be useful.
- Dynamic LINQ - Could it help or hurt to be able to dynamically build your LINQ logic depending on runtime state? I've often wanted to, but understood why C# can't do it by default. Could this package enable such power? Or would it do more harm than good?
These are of course in addition to the ones I've already used repeatedly--if you don't know them well, take a look for sure:
- Dapper - EF
is great but I still think it is overfkill for most needs, especially
if your team is proficient in writing SQL (and they should be). I
cannot bear the thought of spending an hour to make EF do what I want
when I could just write my own SQL and be done with it. Dapper does the
part I want (Mapping rows to objects) and leaves out the part I don't
(Mapping code to queries).
- FluentAssertions - It is so much better
to write intuitive assertions in my tests than to even take the 20
seconds to write it with traditional MSTest assertion syntax. Goodbye
Assert.IsTrue, hello result.Should.
- Moq - There seems to be nothing better for detouring/mocking in your automated tests. Even though .Setup and It.IsAny<T> get tiresome, I haven't found anything better.
- Swashbuckle with Swagger and SwaggerUI - This trio gives my API documentation with hardly any effort. Nice!
- Serilog - We finally have a winner in the logging library fight. Everyone loves it; you will too. Ditch Log4net, nLogger, or anything else you might have struggled with before.