This project is developed and maintained by Mouseless Software Development Collective. It is, and will always be, free and open source.
/docs
: Documentation site. It is a single website that documents every package/samples
: sample projects are here. Each project should be in its own folder/src
: all source code that we ship as nuget packages/tools
: CLI tools/extensions
: features and/or layers/recipe
: recipe packages/core
: core packages that every type of project will have a reference to
/test
: test automation projects/recipe
: e2e test projects per recipe package/core
: unit test projects per package
- When there is a single implementation, it becomes
Baked.{Feature}
andBaked.{Feature}.{Implementation}
, and the configurator is embedded in the single implementation project. - When there are multiple implementations of a feature, the configurator class
is moved to
Baked.{Feature}.Configuration
(or.Base
🤔), and all implementations will depend on this config project. Baked.csproj
contains ports such asLogging
,Setting
, etc. that will be used in all projects.Baked.Configuration.csproj
contains configurator classes and feature interfaces when a second implementation of these ports are introduced.- Sometimes a layer and feature will provide meaningful functionality when they
coexist, such as
HttpClient
andCommunication
. In this case, a layer can be bundled with the feature and can be published in a single package likeBaked.Communication
, meaning a layer can come from a package not named after itself.- However, a feature implementation must always be published with the package name matching its own port.
- Use Layer.Conventions when adding a new layer
- Use Feature.Conventions when adding a new feature or feature implementation
- Use documentation heading names for text fixtures
- ⛔ Wrong =>
AddExtensionTest
- ✅ Correct =>
AddingExtensions
- ⛔ Wrong =>
- Use
Extensions
suffix for static extension classes
- Use file scoped namespaces
- Use
_
prefix for private fields- ⛔ Wrong =>
int id;
- ✅ Correct =>
int _id;
- ⛔ Wrong =>
- Don't use access modifier when they are default
- ⛔ Wrong =>
private int _id;
- ✅ Correct =>
int _id;
- ⛔ Wrong =>
- Use named arguments when calling methods with optional parameters
public void Method(string required string? optional = default ) // ⛔ Wrong service.Method("Required", "Optional"); // ✅ Correct service.Method("Required", optional: "Optional");
- Don't use
[TestFixture]
attribute, nunit runs tests without it anyway - Place static factory or helper methods at the top of before any instance members
- Refer to [PrimaryConstructos][] for coding standards we follow when using
PrimaryConstructors
. - Refer to NullableUsage for coding standards we follow when using
nullable
value and reference types. - Refer to Stylecop.Analyzers for coding standards we enforce using
Stylecop Analyzers
.