# Flashboys C# ## Introduction **Flashboys C#** guidelines describe the practices and conventions used by any project built on top of the **.NET** stack. These guidelines were born out of many trials and errors that we were facing during the development of any **Flashboys** product, but also follow some of the widely spread standards which will be mentioned in this MD file. ## Table of Contents | Chapter | Description | | --------------------- |:-------------:| | [Tools](#Tools) | IDE and common tools | | [Project Structure](#Project-Structure) | Solution layout | | [Naming](#Naming) | Namings, casings, file ordering, etc. | ## Tools For **.NET** projects we use **Visual Studio 2017** (Community or Enterprise). _NOTE: consider migrating to VS2019_. Most projects use the latest framework versions (.NET Framework 4.6.1 or .NET Core 2.1-2.2). When creating a fresh new project, consider using the latest version of .NET (preferably .NET Core). When integrating databases, please consider the following libraries: - for SQL - **Entity Framework** - for MongoDB - **MongoDB.Driver** - for Azure Storage - **Microsoft.WindowsAzure.Storage** For database tooling & debugging, please install the following: - [SSMS](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017) - MSSQL client - [MongoDB Compass](https://www.mongodb.com/download-center/compass?jmp=hero) - MongoDB client - [Azure Storage Explorer](https://azure.microsoft.com/en-us/features/storage-explorer/) - Azure Storage client with local emulator ## Project Structure ### Solution layout In case of developing a library, create a new **C# Class library** project with minimum dependencies specifying just the name, suffixed with **Library** (for example, **Calculator.Library**). This project should be followed with a test project (consider using **xUnit** preferably than standard **MSTest**). The name of the project should be the same as the library project followed by a _Tests_ suffix (in this case **Calculator.Tests**). ``` // Solution structure in case of library development SolutionName │____Calculator.Library │____Calculator.Tests ``` In case of developing a Console, MVC, WebAPI, Azure Web Jobs or Azure Functions project, consider separating the web code and the business logic into separate projects. The business logic is considered to be the library for the web part. ``` // Solution structure in case of a more complex project SolutionName |____Calculator.MVC │____Calculator.Library │____Calculator.Tests ``` ### Project layout ## Naming ## Patterns