Skip to content

Calculate lead times with a Blazor frontend. The project uses different architectural and design patterns.

Notifications You must be signed in to change notification settings

sebastiannordby/lead-time-calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lead-Time Calculator

.NET - Build & Test

Why in worktime?

At my current employer we have a given amount of hours for learning/courses. Since we are refactoring/migrating some older code i thought is was good with some practicing.

Showcase

Prototype: https://www.youtube.com/watch?v=9zVJeKKJZnA

MVP(minimum viable product): https://www.youtube.com/watch?v=aLnKJqv826A

How to Run the Project

To run this project, you will need the following prerequisites:

  1. Visual Studio 2022 (Community, Professional, or Enterprise):

    • You can download it from here.
  2. .NET 9 SDK:

  3. Aspire:

    • Instead of using Docker Compose, I've chosen Aspire, as it’s native to .NET. To install Aspire, the easiest way is through the Visual Studio Installer. Detailed instructions are available on Microsoft's documentation.

Once you have the necessary tools installed:

  • Clone this repository or download it as a ZIP file.
  • Open the solution file in Visual Studio.
  • Set "LeadTimeCalculator.Orchestrator" as the startup project by right-clicking the project in the Solution Explorer and selecting Set as StartUp Project.
  • Finally, click the green Run button or press F5 to launch the application.

Project Structure

I prefer and advocate for Test-Driven Development (TDD), as it ensures that the code remains clean, testable, and well-structured.

For this project, I applied some principles/patterns from: Domain-Driven Design (DDD), Clean Architecture, Hexagonial Architecture.

Production-context

LeadTimeCalculator.Production.Domain:

  • Should contain as much -> to all domain logic
  • Should not be dependent on any internal nor external libraries
  • Should be persistent ignorant

LeadTimeCalculator.Production.Application:

  • Acts as an ACL(anti corruption layer) for the domain
  • Should handle requests(commands or queries)
  • Should expose a port(interface) for what it needs to process the requests

LeadTimeCalculator.Production.Infrastructure:

  • Contains infrastructure
  • Exposes endpoints -> LeadTimeCalculator.API.Application

Guidelines

Production:

Domain:

  • Should only work with the objects defined in the project or native datatypes
  • Should not use models from other features
    • Can use models from Shared-folder

TODO

There are several areas for improvement that I would address in future iterations of this project:

✔: Done, could also be partially and i have not bothered going to the full extend.

✖: Not started or won't do.

  • Logging/Metrics: Could be improved.
  • Proper Persistence: While optional, this could be improved.
  • Continuous Integration: This should have been configured from the start.
  • Continuous Delivery with IaC: This should also be configured from the beginning.
  • Branching Strategy: Pullrequest -> main, smallest changes possible.
  • Security/Quality Code Scanning: Tools like Snyk and/or SonarCloud should be integrated for scanning and monitoring security and quality.
  • Frontend Tests: There are no tests for the frontend at the moment.
  • ✖ API -> Application: Mediatr Could have been used to dispatch requests to the application layer, to avoid having to reference handlers directly in the API-project.
  • ✖ Localization for frontend: The calendar now displays in the language of the browser, but everything else is just hard-coded English.

General Notes

  • The frontend could use some additional work, but given the short timeframe and my busy schedule, I did my best to implement a functional solution within the constraints.
  • I have not used AI for anything other than polishing this README file or helped with commenting code for better formulations. The code itself is written solely by me, Sebastian Nordby.

About

Calculate lead times with a Blazor frontend. The project uses different architectural and design patterns.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published