REST Tip – Use HATEOAS to guide the client HATEOAS = Hypermedia as the Engine of Application State 📦 Instead of sending just data, include actions 🧠 Why? • Makes APIs discoverable • Reduces hard-coded logic on the client • Enables better versioning and evolution
Code Whisper
@codewhisper.bsky.social
👾 Anonymous engineer, sharing thoughts on code, tech & systems. 🚫 No face, just logic. x.com/codewhisperdev
Let’s talk about C# class types — a solid foundation for OOP in .NET. You’ll find more than just “class” in C#. Let’s dive into the types you can define and use.
HTTP Tip Idempotent methods can be safely retried without causing side effects. 🔹 GET, PUT, DELETE, HEAD, OPTIONS → Idempotent 🔹 POST → NOT idempotent 🧠 Why? Using the correct method: ▪️ Makes APIs predictable ▪️ Enables retries in network failures ▪️ Helps with caching, monitoring, and debugging
SQL Tip – Avoid Scalar Functions in SELECT for Performance 🚫 Bad (Scalar function kills performance on large data) ✅ Good (Inline logic or apply in WHERE/CTE for better performance) Example:
.NET DI Lifetime Tips: 🔹 Singleton - one of instance for entire app 🔹 Scoped - one instance per request 🔹 Transient - new instance every time 🚨 Be careful: - Dont inject Scoped/Transient into Singleton (causes bugs/memory leaks) - Use Singleton only for stateless or thread-safe services.
LINQ Tip: Use ToList() after filtering, not before Why? 🔹 First version loads everything into memory before filtering 🔹 Second version filters at source, better for DB or large collections 🔹 Especially important when using EF Core or APIs with IQueryable
Efficient Async Data Streaming with IAsyncEnumerable<T> Scenario: You need to process a large dataset (e.g., database records, file lines, etc.), but you don’t want to load everything into memory at once. Using IAsyncEnumerable<T> lets you stream data asynchronously with minimal memory usage.
🔹 What is Queue<T>? Queue<T> is a First-In-First-Out (FIFO) collection in C#. It means the first item you add is the first one to be removed. When to use? - Task scheduling - Print jobs - Message handling - Breadth-first search (BFS) in graphs Example:
SQL Tip: Always monitor and maintain your indexes. Unused or duplicate indexes = slower writes and wasted space. Why? - Clean indexes = faster inserts/updates - Less I/O, better performance 🔍 Use this to find unused indexes in SQL Server
LINQ Trip: Use GroupJoin for efficient one-to-many relationships instead of nested loops. Why? 🔹 Cleaner than SelectMany + Where 🔹 Ideal for creating master-detail structures in memory
SQL Tip: Use CROSS APPLY for row-wise calculations or to invoke table-valued functions per row. Why? 🔹Powerful for row-by-row subqueries 🔹Cleaner & faster than correlated subqueries in many cases
Csharp Tip: Use async Task for methods so exceptions can be awaited and handled properly. Pro tip: Use async void only for UI event handlers.
Pass by Value vs Pass by Reference 🔹 Pass by Value: A copy of the value is passed to the function. Changes inside the function don’t affect the original variable. 🔹 Pass by Reference: The memory address (reference) is passed. Changes inside the function do affect the original variable.
SQL Tip: Use EXISTS instead of COUNT(*) > 0 for better performance when checking if rows exist. ✅ EXISTS stops at the first match. ❌ COUNT(*) scans the whole table. Faster checks = faster queries ⚡
EF Core Tip – Bulk Update: Need to update thousands of rows? Avoid looping with .SaveChanges() in EF Core — it's slow. Use a bulk update library like EFCore.BulkExtensions for massive performance gains. Bonus: Works for Insert, Delete, Merge too.
Csharp Tip: Extract magic values into constants to improve readability and maintainability. Cleaner code = easier maintenance!
C# Trick: Use Dictionary for fast lookups instead of looping! Instead of searching a list repeatedly, store key-value pairs in a dictionary for O(1) access.
SQL Trick: Use COALESCE() to return the first non-null value from a list of columns or expressions. Why it’s awesome: • Handles null values seamlessly • You can chain multiple options: COALESCE(col1, col2, 'default') Cleaner queries, fewer CASE statements!
Csharp Trick: Use null-coalescing assignment ??= to simplify default value logic in C# 8.0+. What it does: If myList is null, assign it a new list. Shorter, smarter and safer code!
RESTful Tip – Filtering like a pro: Support flexible filtering via query parameters, not custom endpoints. Why? 🔹 Keeps your endpoints clean (/products stays consistent) 🔹 Easy to combine filters (e.g. by brand, price, rating) 🔹 Plays well with sorting & pagination
LINQ Trick: Use Any() instead of Count() > 0 for better performance when just checking for existance. Any() stops at the first match, Count() goes through the whole collection. Speed matters!
One more feature that definitely needs to be added to the this application is bookmarks.
I’ve always wondered whether a new social media app could make its way among established and popular platforms like Instagram, X, or TikTok. Right now, I think Bluesky has the potential to do that.
Let’s integrate into the app first. One major issue: translations aren’t native; they rely on Google Translate. This needs to be properly implemented.