Expert .NET 10 Full-Stack Developer skill. Use this when implementing new features, vertical slices, or modifying existing logic in the MoreSpeakers application. It covers Domain, Data (EF Core), Managers, and Web (Razor Pages + HTMX).
This skill guides the implementation of features following the Clean Architecture pattern used in MoreSpeakers.com. It ensures consistency across the Domain, Data, Managers, and Web layers.
namespace MoreSpeakers.Web;).IUserManager), never concrete types.async/await throughout the stack.src/MoreSpeakers.Domain)IDataStore, IManager) should return Task<T>.src/MoreSpeakers.Data)MoreSpeakersDbContext.sql-schema skill.public class SpeakerDataStore : ISpeakerDataStore
{
private readonly MoreSpeakersDbContext _context;
// ... constructor ...
public async Task<Speaker?> GetAsync(Guid id)
{
// Use AsNoTracking for read-only operations
var entity = await _context.Speakers.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id);
return _mapper.Map<Speaker>(entity);
}
}
src/MoreSpeakers.Managers)src/MoreSpeakers.Web)_SpeakerGrid.cshtml) for HTMX targets.The Container (Parent Page):
<div id="list-container">
<partial name="_ListPartial" model="Model.Items" />
</div>
<button hx-get="@Url.Page("Index", "LoadMore")"
hx-target="#list-container"
hx-swap="beforeend">
Load More
</button>
The Handler (PageModel):
public async Task<IActionResult> OnGetLoadMoreAsync()
{
var items = await _manager.GetNextBatchAsync();
return Partial("_ListPartial", items);
}
Domain.IDataStore interface in Domain.DataStore in Data.DataStore in Program.cs (Scoped).IManager interface in Domain.Manager in Managers.Manager in Program.cs (Scoped).