Pattern docs can be improved
- Dominant language
- C#
- Stars
- 3.7k
- Forks
- 5.1k
- Avg merge
- 9h 11m
- Merged PRs (30d)
- 1
Description
Pattern docs at samples\csharp\tutorials\patterns can be improved ...
1. the samples\csharp\tutorials\patterns\start\toll-calculator.csproj does not compile without TollCalculator implementation
2. attempting to add samples\csharp\tutorials\patterns\finished\toll_calculator.csproj as shared project fails with duplicate project names
3. changing project names [e.g. to Toll-start.csproj, Toll-finished.csproj] complains due to conflicting ExternalSystems
4. classes in ExternalSystems.cs should have default properties or marked required [e.g. otherwise new DeliveryTruck() inits GrossWeightClass=0 !]
although better to have explicit ctors with initializer for all props [maybe derive from external source to enforce]
5. should be simplified to "public static class TollCalculator{..}" so don't need concrete tollCalc instance
6. CalculateToll parameter should be nullable [i.e. public decimal CalculateToll(object? vehicle) => ...], and change calls from null! to null.
7. perhaps fullVan and fullVanPool should be fullCar and fullTaxi respectively ("full van" a peculiarly American phrase)
also "GrossWeightClass" -> "GrossWeight" since unit is lbs as int
8. code is littered with magic numbers (e.g. variously as 2.00m or 2.0m) when should instead be defined in ONE place (e.g. as const decimal CarFare=2.00m)
9. "The null pattern can be last because the other patterns match only a non-null object of the correct type." is non-optimal
in switch expression the null check should happen once [first] otherwise each "is" typecast would have to perform its own null guard compare
10. inefficient switch arms in CalculateToll for Bus, DeliveryTruck [repeated typecast executions]
11. final (catch-all) arm [discard pattern] can be simplified to _ => [e.g. not (_, _, _)]
12. IsWeekDay can be simplified
13. PeakTimePremiumIfElse compares hour < 20 whereas GetTimeBand uses > 19 [needs more brain cycles to verify equivalence]
14. need more vehicle types and/or catch-all [can't just declare unknown!]. e.g. see NYC CRZ at https://congestionreliefzone.mta.info/tolling
practical to accurately assess GrossWeightClass without an actual weighbridge stop ?
15. unnecessary subfolder hierarchy [e.g. simplify start/toll-calculator/* to start-calculator/*]
16. should update TFM [i.e. "net6.0" to "net8.0"] on all projects
I am in process of crafting a PR to suggest how I think docs and sample code should look.
Contributor guide
Assessment
This issue has not been assessed yet.